У меня есть модель, где у места есть некоторые описания, эти описания связаны с интересами (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.
моя модель