Dlatego tworzę witrynę z recenzjami restauracji dla mojej społeczności. Muszę wydobyć dane z następujących tabel: RESTAURACJA, KUCHNIA, MIASTO, CENA i RATING (oceny klientów).

Zapytanie powinno zwrócić wszystkie restauracje o wybranej CUISINE_ID i zwrócić RESTAURANT_NAME, CUSINE_NAME, CUTY_NAME, PRICE_CODE oraz uśrednić wszystkie recenzje RATING_CODE i zwrócić obliczoną wartość. Nie mam nic przeciwko zwróceniu wszystkich danych poza średnią oceną.

Pracuję z LINQ to Entities tylko 2 dni, a LINQ od około 3 tygodni, więc naprawdę jestem nowicjuszem; Czekam na dostarczenie mojej książki LINQ z Amazon.com. Twoje wskazówki dotyczące pomocy będą mile widziane!

0
Susan 14 lipiec 2011, 22:45
1
Czy chcesz uzyskać wynik złożony zawierający: RESTAURANT_NAME, CUSINE_NAME, CUTY_NAME, PRICE_CODE i RATING_CODE_AVG? A może wystarczy możliwość wygenerowania średniego kodu jako oddzielnego wyniku od reszty danych?
 – 
CodingGorilla
14 lipiec 2011, 22:49

2 odpowiedzi

Najlepsza odpowiedź

Powinno to wyglądać mniej więcej tak:

var avgForMatches = 
    (from r in context.Restaurants
     where r.Cuisines.Any(c => c.CuisineName == cuisineName)
     where r.Prices.Any(p => p.PriceCode == priceCode)
     //... same pattern for other searches.
     select r.RatingCode)
    .Average();
1
StriplingWarrior 14 lipiec 2011, 22:54
Wow .... to takie proste. Jeszcze jedno pytanie, „kontekst”… czy to słowo zastrzeżone, czy odnosi się do modelu moich jednostek?
 – 
Susan
14 lipiec 2011, 23:15
1
Tak, to proste. Ostrzegam: LINQ może naprawdę uzależnić. ;-) context to po prostu zmienna, która odwołuje się do instancji modelu encji. Zwykle opakowuję kod zapytania EF w coś takiego jak using (var context = new MyEntityContext()) {...}. (Właściwie to zwykle używam wstrzykiwanej fabryki, zamiast tworzyć ją sam, ale masz ogólny pomysł.)
 – 
StriplingWarrior
14 lipiec 2011, 23:46

Przeczytaj o metodach agregujących (w tym średniej) w 101 przykładach linq — http://msdn.microsoft .com/en-us/vcsharp/aa336747

0
Stuart 14 lipiec 2011, 22:48