C# 在实体框架中连接多对多表

C# 在实体框架中连接多对多表,c#,entity-framework,C#,Entity Framework,我有一个如图所示的表格布局。一个主表(用户)和两个带有连接表的多对多表(首选项和位置)。我已在数据模型中设置了正确的关系,以允许从这些m-2-m表中进行选择 我正在编写的报告工具允许用户(从清单中)选择任何用户偏好或用户位置。我想做的是只从用户表中选择记录,其中首选项或位置至少包含一个选择 对于Linq查询,这可能吗?(我以前是用SQL编写的,但在我开始这一部分之前,用Linq编写似乎更容易!) 非常感谢, 编辑:Visual Studio 2012,实体框架4,SQL Server 2008

我有一个如图所示的表格布局。一个主表(用户)和两个带有连接表的多对多表(首选项位置)。我已在数据模型中设置了正确的关系,以允许从这些m-2-m表中进行选择

我正在编写的报告工具允许用户(从清单中)选择任何用户偏好或用户位置。我想做的是只从用户表中选择记录,其中首选项位置至少包含一个选择

对于Linq查询,这可能吗?(我以前是用SQL编写的,但在我开始这一部分之前,用Linq编写似乎更容易!)

非常感谢,

编辑:Visual Studio 2012,实体框架4,SQL Server 2008 R2

from u in Users
where u.Locations.Any(l => l.Name == value) ||
      u.Preferences.Any(p => p.Title == value)
select u;
这将生成两个子查询。Lambda语法:

Users.Where(u => u.Locations.Any(l => l.Name == value) ||
                 u.Preferences.Any(p => p.Title == value));

类似于
Users.Where(x=>Preferences.Any(y=>y.UserID==x.UserID)| Locations.Any(y=>y.UserID==x.UserID))?作为事后思考,如果我有一个要比较的动态值列表-有没有比使用l.Name==“xxx”| | l.Name==“yyy”| | l.Name==“zzz”更好的编写方法?Simon您可以创建值列表
{“xxx”、“yyy”、“zzz”}
,并检查此列表是否包含位置或首选值:
u.Locations.Any(l=>values.Contains(l.Name))
。我认为这应该适用于子查询。谢谢。在发布文章之前,我刚刚到达那里。