Mik*_*yer 6 c# linq-to-entities entity-framework
我有一个模型,其中一个地方有一些描述,这些描述与兴趣(place.description.interests)相关联.查看场所视图的用户在模型中表示为用户,其也具有许多兴趣.
我想要做的是按重叠的兴趣(包括零重叠)对描述进行排序,我目前的Linq是:
place dest = (from p in _db.places
where p.short_name == id
select p).Single();
return View(dest);
Run Code Online (Sandbox Code Playgroud)
现在,以下将在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
Run Code Online (Sandbox Code Playgroud)
但我对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
Run Code Online (Sandbox Code Playgroud)
(PlaceID和UserID是传递给管理它的控制器的参数).
简单地说,鉴于这个linq,我只需要返回d,按照i的数量排序.
我的模特

当您的 linq 查询变得过于复杂时,我建议您在数据库中创建视图并将它们放在 dbml 设计器上。我经历过几种情况,在 linq 查询中进行大量分组会导致 sql 效率低下。使用视图不仅会产生直接的 linq 查询,而且还会使用您想要的 sql。
| 归档时间: |
|
| 查看次数: |
496 次 |
| 最近记录: |