我对此表示怀疑。我正在开发 EF Db第一个应用程序。
我有下表;
学生(身份证)
StudentActivityLog(activityid,studentid)
活动(id)
我有活动ID列表,我想找到完成这些活动的学生
我觉得我可以写下我想写的linq查询。 这些都是正确的,如果是这样,最好的查询是什么
from s in db.Students
where s.StudentActivityLogs.All(a => activityList.Contains(a.activityId)
select s
或
from s in db.Students
join sa in db.StudentActivityLog on s.ID equals sa.studentid
where activityList.Contains(sa.activityId)
因为我在学生班里面有活动列表,所以我认为不需要表连接。但我已经看到这个加入了很多例子。请指教。
答案 0 :(得分:2)
第一个更具“LINQ意义”,但除非你在studentactivitylog中有其他属性(而不仅仅是2个ID),否则你最好没有实体框架公开关系表但只是简单地映射它与NN学生和活动之间的关系,以便您的查询看起来像
var ActivityStudents = db.Activities
.Where(act=>activityList.Contains(act.activityId))
.SelectMany(act=>act.Students)
如果无法做到这一点,那么你的第一个问题是好的,如果你想要的是抓住你的原始名单中活动全部的学生,如果你想要的是抓住那些活动在列表中至少匹配1的学生(但是也可能正在进行其他活动)您希望通过调用Any
来替换对All的调用