Lambda表达式转换

问题描述:

我是Linq的初学者。Lambda表达式转换

如何重写这个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 ....... 
      where ..... 
      select c new {....} 
+2

这不是一个“编译”查询。这只是一种不同的语法。它没有技术上的优势。 – 2009-10-13 07:23:51

+0

我不需要技术优势。抱歉! – anonymous 2009-10-13 07:25:18

+0

我感觉Linq语法比lambda变体更具可读性。 – 2009-10-13 07:29:15

那么这里是最接近查询表达式语法:

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#的操作方式感到满意;它避免了添加太多的上下文关键字。)

(As Mehrdad说,这不是一个“编译”的查询,实际上代码将被编译为完全相同的IL)。

+0

击败我3秒!没关系。 – 2009-10-13 07:25:14

+0

不知道包含索引的重载。然而,另一个linq谜题解决了: - D. – 2009-10-13 07:28:14