2011-02-14 116 views
-1

简单线条:转换为LINQ lambda表达式

var x = (from a in arr select a).First(); 
Console.WriteLine(“First" + x); 

如何转换为Lambda表达式?

+0

()=> arr.First()?第一行和第二行似乎不同步 - 代码段中是否有错误? – Gishu 2011-02-14 05:45:21

+0

你的第一行只是var x = arr.First(),我不知道你最后一个变量是指什么...... – Joe 2011-02-14 05:47:05

回答

2

因此,你想要将LINQ查询从使用查询语法转换为普通的扩展方法调用?

// var first = (from a in arr select a).First(); 
var first = arr.First(); 

// var last = (from a in arr select a).Last(); 
var last = arr.Last(); 

// var filtered = (from a in arr where a == 10 select a).First(); 
// there are a couple of ways to write this: 
var filtered1 = arr.Where(a => a == 10) 
        .First(); 
var filtered2 = arr.First(a => a == 10); // produces the same result but obtained differently 

// now a very complex query (leaving out the type details) 
// var query = from a in arr1 
//    join b in arr2 on a.SomeValue equals b.AnotherValue 
//    group new { a.Name, Value = a.SomeValue, b.Date } 
//     by new { a.Name, a.Group } into g 
//    orderby g.Key.Name, g.Key.Group descending 
//    select new { g.Key.Name, Count = g.Count() }; 
var query = arr1.Join(arr2, 
         a => a.SomeValue, 
         b => b.AnotherValue, 
         (a, b) => new { a, b }) 
       .GroupBy(x => new { x.a.Name, x.a.Group }, 
         x => new { x.a.Name, Value = x.a.SomeValue, x.b.Date }) 
       .OrderBy(g => g.Key.Name) 
       .ThenByDescending(g => g.Key.Group) 
       .Select(g => new { g.Key.Name, Count = g.Count() }); 
+0

是啊使用查询语法与普通扩展方法调用的优点是什么? Yur代码比我的短,那么为什么要使用基于查询的表达式 – learningdb 2011-02-14 05:50:47

1

当你有形式(from y in x select y)的表情,你几乎总是可以写x代替。