Поиск пересекающихся интересов в LINQ

У меня есть модель, в которой место имеет некоторые описания, эти описания связаны с интересами (place.description.interests). Пользователь, просматривающий вид на место, представлен в модели как пользователь, у которого также есть ряд интересов.

Я хочу отсортировать описание по перекрывающимся интересам (включая нулевое перекрытие), где мои текущие Linq:

place dest = (from p in _db.places
                          where p.short_name == id
                          select p).Single();

 return View(dest);

Теперь следующее будет делать то, что я хочу в SQL, в рассматриваемой схеме:

SELECT COUNT(interest_user.user_id) AS matches, description.*
FROM description JOIN interest_description ON description.user_id = interest_description.user_id AND description.place_id = interest_description.place_id
    JOIN interest ON interest_description.interest_id = interest.interest_id
    LEFT JOIN interest_user ON interest.interest_id = interest_user.interest_id 
WHERE interest_user.user_id = 2
    AND description.place_id = 1
GROUP BY interest_description.user_id, interest_description.place_id
ORDER BY matches DESC

Но я слишком новичок в Linq, чтобы знать, как я с этим справлюсь правильно. В идеале я мог бы осуществить это, все еще передавая строго типизированную модель.

Пока мне удалось это:

var desc = from d in _db.descriptions
                       from i in d.interests
                       from u in i.users.DefaultIfEmpty()
                       where d.place_id == PlaceID
                           && (u.user_id == userID

(PlaceID и UserID - это аргументы, передаваемые контроллеру, который этим управляет).

Проще говоря, учитывая этот linq, мне просто нужно вернуть d, отсортированное по счетчику i.

моя модель enter image description here

6
задан Mike Hillyer 20 June 2011 в 04:23
поделиться