是否需要在EF中执行表连接

时间:2014-06-06 03:50:26

标签: c# entity-framework

我对此表示怀疑。我正在开发 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)

因为我在学生班里面有活动列表,所以我认为不需要表连接。但我已经看到这个加入了很多例子。请指教。

1 个答案:

答案 0 :(得分:2)

第一个更具“LINQ意义”,但除非你在studentactivitylog中有其他属性(而不仅仅是2个ID),否则你最好没有实体框架公开关系表但只是简单地映射它与NN学生和活动之间的关系,以便您的查询看起来像

var ActivityStudents = db.Activities
      .Where(act=>activityList.Contains(act.activityId))
      .SelectMany(act=>act.Students)

如果无法做到这一点,那么你的第一个问题是好的,如果你想要的是抓住你的原始名单中活动全部的学生,如果你想要的是抓住那些活动在列表中至少匹配1的学生(但是也可能正在进行其他活动)您希望通过调用Any

来替换对All的调用