C# 如何在实体框架中进行适当的左连接

C# 如何在实体框架中进行适当的左连接,c#,entity-framework,C#,Entity Framework,这应该是一个非常简单的问题来解决,但由于某种原因,实体框架对我来说非常困难。我只需要做一个简单的左连接 我有两张桌子。例如,用户表: user_id | name | fk_group_id 还有一张团体桌 group_id | groupname 在原始SQL中: SELECT * FROM users AS u LEFT JOIN groups AS g ON u.fk_group_id = g.group_id WHERE groupname = 'my group' 超级容易在SQ

这应该是一个非常简单的问题来解决,但由于某种原因,实体框架对我来说非常困难。我只需要做一个简单的左连接

我有两张桌子。例如,用户表:

user_id | name | fk_group_id
还有一张团体桌

group_id | groupname
在原始SQL中:

SELECT * FROM users AS u
LEFT JOIN groups AS g
ON u.fk_group_id = g.group_id
WHERE groupname = 'my group'
超级容易在SQL。但当我寻找如何做到这一点的答案是实体框架,然后有一件事,立即通过我的脑海。。。世界跆拳道联盟。。。!?!? 超级大的构造,奇怪的格式“查询”被执行,我真的很困惑我需要什么和不需要什么

所以我希望有人能帮我解决我的具体问题。如何在(LINQ?)实体框架中重写上述SQL查询

目前我有:

var bla = (from m in myEnt.Users
          // My join attempt..
          join mp in myEnt.Groups on m equals mp.group_id into n
          where n.group_name == "something"
          select m);
即使这样做行得通,我真的不明白这怎么会让我的生活更轻松。。哦

无论如何,我真的希望有人能帮我:-)

你为什么需要加入? 用户和组之间是否已经存在关系

var bla = from m in myEnt.Users
           where m.Group.Groupname = "something"
           select m;

这应该很好,还是我错了?

嗯,您不必在任何ORM中明确地这样做。这就是问题所在,这就是映射的目的

你可以去:

var blah = myEnt.Users.Where(user => user.Group.Name == "something");
或者用另一种语法

from usr in myEnt.Users
where usr.Group.Name == "something"
select usr`

如果映射到对象后是多对一关系,则每个
用户
实体都将拥有其
的导航属性,并且每个
都将拥有一个
用户
集合。然后你只需要适当地过滤结果。

谢谢,这对我来说更有意义,实际上也让事情变得更简单:-)尽管我还有一个问题要问。我试图明确地告诉“var bla”需要什么类型的类型,所以:ddUsers bla=(query…)——但它说:无法将IQueryable转换为目标类型ddUsers,但当我简单地将var放在它前面时,它确实起作用。这是否意味着我不能明确地告诉查询返回的是什么类型?@w00好吧,
ddUsers
是数据库术语中的一行,一个实体
其中
始终返回一个集合,因此
IQueryable
。如果您只需要单个实体,并且您知道它在数据库中,您可以使用
ddUser blah=myEnt.Users.single(user=>user.Group.Name==“something”)
(如果有多个匹配项或选择为空,则将返回单个实体或引发异常),或者使用
First
获取第一个实体,
Last
获取最后一个等:)我实际上不需要单个实体。但是你让我想起我忘了在它前面放一个IEnumerable:-)--它现在按我想要的方式工作。非常感谢你的帮助!