C# Lambda表达式转换

C# Lambda表达式转换,c#,lambda,C#,Lambda,我是Linq的初学者 如何将此lambda表达式重写为linq编译查询 var query5 = CustomerList.Select((cust, index) => new {cust, index}) .Where(c => c.cust.Country == "USA" && c.index > 70) .Select(c => ne

我是Linq的初学者

如何将此lambda表达式重写为linq编译查询

var query5 = CustomerList.Select((cust, index) =>  new {cust, index})
                         .Where(c =>  c.cust.Country == "USA"  &&  c.index  >  70)
                         .Select(c =>  new { c.cust.CustomerID, c.cust.CompanyName, 
                                            c.index });


下面是最接近的查询表达式语法:

var query5 = from c in CustomerList.Select((cust, index) =>  new {cust, index})
             where c.cust.Country == "USA"  &&  c.index  >  70
             select new { c.cust.CustomerID, c.cust.CompanyName, c.index };
基本上,在查询表达式语法中不能做的一点是包含索引重载的选择。根本没有任何语法可以翻译成这样。许多其他操作也是如此——VB的LINQ语法在这方面更为丰富,尽管我个人对C的操作方式感到满意;它避免了添加太多上下文关键字


正如Mehrdad所说,这不是一个已编译的查询。事实上,代码将被编译为完全相同的IL。

下面是最接近的查询表达式语法:

var query5 = from c in CustomerList.Select((cust, index) =>  new {cust, index})
             where c.cust.Country == "USA"  &&  c.index  >  70
             select new { c.cust.CustomerID, c.cust.CompanyName, c.index };
基本上,在查询表达式语法中不能做的一点是包含索引重载的选择。根本没有任何语法可以翻译成这样。许多其他操作也是如此——VB的LINQ语法在这方面更为丰富,尽管我个人对C的操作方式感到满意;它避免了添加太多上下文关键字


正如Mehrdad所说,这不是一个已编译的查询。事实上,代码将被编译成完全相同的IL。

这不是一个已编译的查询。这只是一种不同的语法。它没有技术优势,我不需要技术优势。很抱歉我确实觉得Linq语法比lambda变体可读性更强。@Jonathan van de Veen-也许吧,但是有相当多的操作只能通过lambda语法进行。这不是一个编译过的查询。这只是一种不同的语法。它没有技术优势,我不需要技术优势。很抱歉我确实觉得Linq语法比lambda变体可读性更强。@Jonathan van de Veen-也许吧,但有相当多的操作只能通过lambda语法使用。我不知道有包含索引的重载。还有一个linq谜团被解开了:-DWasn不知道包含索引的重载。另一个linq谜团解开了:-D