我已定义实体Foo和Bar,以便Foo具有非映射条。 Bar未映射的原因是,给定的Foo可能会映射到许多不同的单个Bar,具体取决于执行代码时传入的GroupingId。
我的目标是使用Bar导航属性(如果存在)传回Foo实体的集合,下面是我目前尝试执行此操作的代码,但未成功。
var stuff = _Repository.Find<Foo>(x => Codes.Contains(x.Code))
.GroupJoin(_Repository.Find<Bar>(y => y.GroupingId == groupingId),
x => barId,
y => Id,
(x, y) => x.Bar = y.FirstOrDefault());
错误是无法从使用中推断出类型参数,我认为这是因为我没有指定在将y绑定到Bar属性后需要返回x。
我是否需要声明一个匿名函数来执行此操作,并且它是否适用于实体框架?
答案 0 :(得分:4)
Linq用于查询,而非更新。如果您想要更新,那么您可以创建一个查询来获取所需的所有数据,然后使用foreach
更改它们:
var stuff = _Repository.Find<Foo>(x => Codes.Contains(x.Code))
.GroupJoin(_Repository.Find<Bar>(y => y.GroupingId == groupingId),
x => barId,
y => Id,
(x, ys) => new {x, ys});
foreach(var s in stuff)
{
s.x.Bar = s.ys.FirstOrDefault();
}