Rol*_*oll 3 .net c# linq lambda
我能用Lambda(方法语法)而不是(查询语法)执行什么查询?
问题很简单,这是两个例子:
int[] numbers = { 5, 10, 8, 3, 6, 12};
//Query syntax:
IEnumerable<int> numQuery1 =
from num in numbers
where num % 2 == 0
orderby num
select num;
//Method syntax:
IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);
Run Code Online (Sandbox Code Playgroud)
什么是查询,我可以执行方法语法而不是查询语法?
(这是一个比我最初写的更短的答案,但其他答案已经提供了一些细节.)
人们可能希望使用lambda表达式而不是查询表达式有两个原因:
简单地不被查询表达式覆盖的操作,是否完全没有涵盖的方法(例如Count)或查询表达式中包含的操作的重载,但不包括在该形式中.例如:
var indexedValues = values.Select((value, index) => new { value, index });
Run Code Online (Sandbox Code Playgroud)
没有使用该重载的查询表达式表单.
当lambda形式更简单.例如,如果您只有一个投影或过滤器,则在一次调用中执行此操作比设置查询表达式的绒毛更简单:
var adults = people.Where(person => person.Age > 18);
Run Code Online (Sandbox Code Playgroud)
VS:
var adults = from person in people
where person.Age > 18
select person;
Run Code Online (Sandbox Code Playgroud)
此外,如果要在查询后继续表达式,则lambda表达式方法稍微整洁一些.例如,创建成人姓名列表:
var names = people.Where(person => person.Age > 18)
.Select(person => person.Name)
.ToList();
Run Code Online (Sandbox Code Playgroud)
VS:
var names = (from person in people
where person.Age > 18
select person.Name).ToList();
Run Code Online (Sandbox Code Playgroud)
括号最终有点刺激.
当查询表达式闪耀在其中介绍的操作透明标识符 -联接,SelectMany,let等等.虽然你明明可以翻译这样的代码为拉姆达的形式,它可以结束了真难看.