2

这应该是一个非常容易解决的问题,但由于某种原因,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'

SQL超级简单。但是当我寻找关于如何做到这一点的答案是实体框架时,我脑海中突然闪过一件事...... WTF......!?!?超级大的构造,奇怪的格式“查询”被执行,我真的很困惑我需要什么,什么不需要......

所以我希望有人可以帮助我解决我的具体问题。如何在(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);

即使这行得通,我真的不明白这应该如何让我的生活更轻松.. Oo

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

4

2 回答 2

4

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

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

这应该没问题还是我错了?

于 2012-06-06T08:53:23.890 回答
4

嗯,您不必使用任何 ORM 显式执行此操作。这就是问题所在,这就是映射的用途。

你可以去:

var blah = myEnt.Users.Where(user => user.Group.Name == "something");

或者在替代语法中

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

如果映射到对象后是多对一的关系,那么每个User实体都会有他的导航属性 Group,每个实体都会Group有一个User集合。然后你只需要适当地过滤结果。

于 2012-06-06T08:53:26.853 回答