2013-10-24 2 views
0

Я хочу получить лучшие пять ресторанов в моей базе данных. Структура базы данных усложняет мой запрос linq.Запрос на поиск лучших пяти ресторанов

Вот как я работаю, у меня есть таблица «комментарии», который содержит внешний ключ к моему ресторане и у меня есть три варианты голосования между примером 1 и 5.

Таблицы:

- idRestaurant 
- ratingOne 
- ratingTwo 
- ratingThree 

поэтому я бы классифицировал ресторан со средним в среднем из трех нот

Если, например, у меня есть несколько записей в таблице

idRestaurant 1 - RatingOne 2 - RatingTwo 2 - RatingThree - 2 

idRestaurant 1 - RatingOne : 4 - RatingTwo : 4 - RatingThree - 4 

idRestaurant 2 - RatingOne : 3 - RatingTwo : 3 - RatingThree - 3 

idRestaurant 2 - RatingOne : 4 - RatingTwo : 4 - RatingThree - 4 

idRestaurant : 3 - RatingOne 1 - RatingTwo 1 - RatingThree - 1 

idRestaurant : 3 - RatingOne 1 - RatingTwo 1 - RatingThree - 1 

idRestaurant : 4 - RatingOne 1 - RatingTwo 1 - RatingThree - 1 

idRestaurant : 4 - RatingOne 1 - RatingTwo 1 - RatingThree - 1 

idRestaurant : 4 - RatingOne 1 - RatingTwo 1 - RatingThree - 1 

idRestaurant : 4 - RatingOne 5 - RatingTwo 5 - RatingThree - 5 

Я хотел бы результат моего LINQ отправить мне список idRestaurants в порядке общей оценки без дублированного ресторана например: {2,1,4,3}

У меня есть следующий запрос

var restosss = (from w in db.restos_cote 
       group w by w.idRestoSuccursale into g 
       select new 
       { 
        idRestoSuccursale = g.Key, Restos = g 
       }); 

, но его также нужно сортировать по среднему баллу.

+2

Пожалуйста, покажите усилия, прежде чем отправлять вопрос. В Stack Overflow мало людей, которые хотят сделать вашу работу за вас. Вы что-то пробовали? Что работает, что не работает? –

+0

Привет, у aleary есть запрос для группы resto, но я хочу, чтобы orber был средним из трех значений ... var restosss = (from w in db.restos_cote group w by w.idRestoSuccursale in g select new {idRestoSuccursale = g.Key, Restos = g}); – user2913658

ответ

0

Ну среднее из трех значений только val1 + val2 + val3/3

Затем вы можете использовать Average по этому расчету.

var restosss = (from w in db.restos_cote 
       group w by w.idRestoSuccursale into g 
       select new 
       { 
        idRestoSuccursale = g.Key, Restos = g 
        avgRating = g.Average(x => (x.RatingOne + x.RatingTwo + x.RatingThree)/3.0) 
       }) 
       //if you want "best ratings" first, else use OrderBy 
       .OrderByDescending(m => m.avgRating) 
       //take only the 5 best ratings 
       .Take(5); 

Кстати, если вы просто хотите, правильный порядок, но не использовать средний результат, вам не нужно делить на 3.0

Смежные вопросы