gpt4 book ai didi

c# - 如何在 Linq 连接期间设置 x.foo = y?

转载 作者:太空宇宙 更新时间:2023-11-03 21:17:19 25 4
gpt4 key购买 nike

我定义了实体 Foo 和 Bar,使得 Foo 有一个未映射的 Bar。 Bar 未映射的原因是给定的 Foo 可能映射到许多不同的单个 Bars,具体取决于执行代码时传入的 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 绑定(bind)到 Bar 属性后我需要返回 x。

我是否需要声明一个匿名函数来执行此操作,它是否可以与 Entity Framework 一起使用?

最佳答案

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();
}

关于c# - 如何在 Linq 连接期间设置 x.foo = y?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33128100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com