gpt4 book ai didi

c# - 无法将 Statement Lambda 放入 LINQ 查询中

转载 作者:行者123 更新时间:2023-11-30 19:33:39 24 4
gpt4 key购买 nike

我正在尝试将一些内联工作作为 Statement Lambda 注入(inject)到 LINQ 查询 select 中,就像这样......

// NOTE: mcontext.Gettype() == System.Data.Linq.DataContext

// Okay - compiles, nothing unusual
var qPeople1 = from ME.tblPeople person in mcontext.tblPeoples
select person;

// ERROR - see below compile Error - Can I retrofit this thing?
var qPeople2 = from ME.tblPeople person in mcontext.tblPeoples
select (() => {
return person;
})();

错误:

Error 2 Method name expected file.cs 166 27 MigrationCore

...不过,我同样很高兴看到 Expression Lambda 首先内联工作。

注意:我知道代码示例在其工作中是多余的,但我正在寻找基本概念。如果它可行,我将对其进行扩展。

最佳答案

查询语法需要一个方法引用 - 它不会接受 lambda,在你的第二个例子中你给它一个 ME.tblPeople 实例。

但是,如果您使用扩展方法语法,您可以轻松实现:

int i = 0;
var qPeople3 = (from ME.tblPeople person in mcontext.tblPeoples
select person).Select(person => { i += 1; return person; });

(我添加了递增整数作为示例,但请注意,在您枚举 qPeople3 之前,它实际上并没有从零开始变化。)

附录

这仅适用于 LINQ to Objects。要将其与 LINQ to SQL 查询一起使用,需要在 Select() 调用之前调用 AsEnumerable()

注意事项

对于这个例子,你实际上不需要 from-in-select 结构,下面的片段是(AFAICT)相同的,但为了与前面的例子相似,我把它留在上面并说明它有效。第二个片段将两个语句拆分为不同的行,结果也相同。

int i = 0;
var qPeople4 = mcontext.tblPeoples.Select<ME.tblPeople,ME.tblPeople>(person => { i += 1; return person; });
int i = 0;
var qPeople1 = from ME.tblPeople person in mcontext.tblPeoples
select person;
var qPeople5 = qPeople1.Select(person => { i += 1; return person; });

关于c# - 无法将 Statement Lambda 放入 LINQ 查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3261037/

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