gpt4 book ai didi

c# - 在 LINQ 中查找重叠兴趣

转载 作者:太空狗 更新时间:2023-10-29 21:36:08 26 4
gpt4 key购买 nike

我有一个模型,其中一个地方有一些描述,这些描述与兴趣相关联 (place.description.interests)。查看某个地点 View 的用户在模型中表示为用户,该用户也有许多兴趣。

我想做的是按重叠兴趣(包括零重叠)对描述进行排序,我当前的 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 是传递给管理它的 Controller 的参数)。

简单地说,给定这个 linq,我只需要返回 d,按 i 的计数排序。

我的模型 enter image description here

最佳答案

当您的 linq 查询变得过于复杂时,我会建议您在数据库中创建 View 并将它们放在 dbml designer 上。当在 linq 查询中进行大量分组导致 sql 效率低下时,我遇到过几种情况。使用 View 不仅会导致直接的 linq 查询,还会使用您想要的 sql。

关于c# - 在 LINQ 中查找重叠兴趣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6381463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com