Linq to entities:没有投影的左连接

时间:2014-04-15 14:43:49

标签: linq-to-entities left-join

我需要一些帮助。 我目前有3张桌子:     House(id,name,isDisplayed)     房间(id,name,isDisplayed)     图片(身份证,姓名)

房子可以有O .. *房间和房间可以有0 .. *图片

如此简单的情况,我想要所有带房间和图片的房子

var query=db.Houses.Include(h=>h.Rooms).Include(h=>h.Rooms.Select(r=>r.Pictures));

这样工作正常,所以确定:)

现在,让我们说我希望所有House和他们的房间(包括房间的照片)都被设置为真,而且房间没有房间

使用SQL,这很容易,但我将Linq用于实体,我显然不想进行预测。

你认为有办法吗?

由于

2 个答案:

答案 0 :(得分:0)

简答:您需要投射到新的类/匿名类型。

实体是数据库中数据的表示,这允许实体框架跟踪对实体的更改,并在保存时将这些修改推送回数据库。因此,所有返回的实体都需要不加修改。否则,当您去保存时,实体框架将进行您在select中指定的所有数据库修改,在您的情况下,它将使用isDisplayed = false删除数据库中的所有记录

答案 1 :(得分:0)

db.Houses.Include(X => x.Rooms.Select(E => e.Pictures))     .Where(x =>!x.Rooms.Any()|| x.Rooms.Any(e => e.Pictures.Any(v => v.IsDisplayed))     .ToList()