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

标签 c# entity-framework linq

我定义了实体 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/

相关文章:

c# - 两个并行的 TransactionScope,每个都有自己的连接

c#/Linq 总和在哪里

c# - 从另一个表获取ID

c# - Linq、错误提供程序、数据绑定(bind) : Custom error messages

c# - 防止覆盖 C# 中的单个方法

c# - 委托(delegate)可以更改委托(delegate)链中的参数吗? (C#)

两个协变接口(interface)的 C# 协变问题

c# - 由于意外的数据包格式登录到 Pop3,握手失败

c# - 扩展 Entity Framework 模型以包含新属性

c# - 有没有一种扩展代码优先迁移的好方法