【发布时间】:2011-01-02 15:40:20
【问题描述】:
我有一个如下所示的 LINQ 查询:
public IEnumerable<Foo> SelectFooBars()
{
return
from
f in foos
join
b in bars
on f.BarId equals b.Id
select
AddMissingProp(f, b.MissingProp);
}
public void AddMissingProp(Foo foo, string missingProp) // substitute this with inline lambda
{
foo.MissingProp = missingProp;
return foo;
}
我想摆脱 AddMissingProp 并在我的 select 子句中使用某种形式的 lambda。
我尝试过……
...
select
(f, b) => { f.MissingProp = b.MissingProp; return f }
...但我收到以下错误:
不能在此范围内声明名为“f”的局部变量,因为它会给“f”赋予不同的含义,后者已在“父级或当前”范围内用于表示其他内容。
如何“lambda-ize”我的查询?
更新
这也行不通:
...
select
() => { f.MissingProp = b.MissingProp; return f }
我收到以下错误:
连接子句中的一个表达式的类型不正确。调用“加入”时类型推断失败。
我根本没有更改join 子句,所以我很困惑。
【问题讨论】:
-
我不太了解 LINQ 语法,无法将其写出来,但在 foreach(yourLinqQuery) 语句中进行变异不是更好吗?对对象进行选择变异似乎令人困惑。
-
@Doc Brown,这实际上只是我的示例中的一个错字(我的真实代码是
equals)。现已修复。
标签: c# linq lambda anonymous-methods