Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否需要在EF中执行表连接_C#_Entity Framework - Fatal编程技术网

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

C# 是否需要在EF中执行表连接,c#,entity-framework,C#,Entity Framework,我对此表示怀疑。我正在开发EF Db first应用程序 我有下表 学生(id) StudentActivityLog(activityid,studentid) 活动(id) 我有活动ID列表,我想找到做过这些活动的学生 我觉得下面是我能写的两个linq问题。 这些都是正确的吗?如果是,最好的查询是什么 from s in db.Students where s.StudentActivityLogs.All(a => activityList.Contains(a.activityId

我对此表示怀疑。我正在开发EF Db first应用程序

我有下表

学生(id)
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)

因为我的学生课堂上有活动列表,所以我认为不需要表连接。但我在很多例子中都看到了这一点。请告诉我

第一个更具“LINQ意义”,但除非您在studentactivitylog中有其他属性(而不仅仅是2 ID),否则最好不要让entity Framework公开关系表,而只是用学生和活动之间的关系将其映射,这样您的查询看起来就像

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

如果这是不可能的,您的第一个查询是可以的,如果您想要的是抓取其活动全部在原始列表中的学生,如果您想要的是抓取其活动至少与列表中的1项匹配的学生(但也可能是在做其他活动)你想用对任何表的调用来代替对所有表的调用

这些表之间的关系是什么?@Shoe StudentActivityLog->activityid referering id of activity和-StudentActivityLog->studentid referering id of the student你的答案对我来说有点不清楚。还有一些附加列。就像决斗的日期,竞争的时间。。。在这种情况下,第一个查询仍然有效吗?是的,它只是意味着不能按照我提到的更简单的方式进行(即忽略中间表)。您的第一个版本很好,可以翻译为:对于每个学生,如果他的所有活动都在列表中,请抓住他。然而,如果你想抓住一个学生,如果列表中至少有一项活动,你想把你的全部改成任何一项