令人惊讶的是,关于这方面的信息如此之少。我找到了大量解释LINQ的教程,但它们并没有解释这个特定的操作符:
var Results = UserFavoritesContext.UserFavorites.Select(color => color.FavoriteColor);
"x=>x.y"
有人能解释一下这是怎么回事吗?我掌握了通用语法,并能够使用它进行查询,但这就像在不知道自己在做什么的情况下做一些事情。
假设您有一个people
的列表,并且您想要对它们进行迭代。你会写这样的东西:
foreach(var person in people)
{
//do something to person
}
请注意您自己是如何选择名称person
的。它可以是任何单词,但您基本上说"将列表中的每一项都作为我的person
变量处理"。
现在看看这个LINQ查询:
filteredPeopleList = people.Where(person => person.Name == "John");
同样,您基本上选择了person
作为原始列表中每个对象的占位符名称(一次一个)。上述Linq查询相当于
foreach(var person in people)
{
if(person.Name == "John")
{
filteredPeopleList.Add(person);
}
}
对我来说,x => x.y
基本上是在说"对于我们处理的每个变量(让我们称之为x
),请对其执行以下操作(x.y
,获取y
属性)"
我希望这能解释它。
编辑
正如一位现已删除评论的评论者所提到的,这并不是LINQ独有的功能。lambda表达式不必在IEnumerable
上迭代,它可以用于处理单个项
然而,LINQ是迄今为止遇到Lambda最常见的地方,我发现它们的使用与foreach
循环非常相似,这就是我选择这个例子的原因。
运算符用于lambda表达式。
考虑这一点的最佳方式是编写函数的语法类型,其中运算符的左侧是函数的参数,右侧是函数的主体。例如,这是lambda表达式的有效使用,其使用方式与函数类似:
Func<int, int> incrementFunction = i => i + 1;
int incrementedNumber = incrementFunction(1);
在这种情况下,名称i是一个任意的变量名称,例如,就像命名函数输入参数一样。请注意,我不需要声明输入参数类型,因为编译器会推断它。此外,我也不需要包含"return"关键字或将函数体包含在代码块中。它也不一定需要任何参数,例如
Action myAction = () => Console.Write("something");
myAction();
当您在linq表达式中使用它时,请将其视为对集合中的每个元素都调用lambda函数(我相信这正是linq对对象所发生的情况)。
这是Lambda表达式的语法。如果它能帮助你记住。。。简而言之,要传递的参数(参数)在=>的左边,使用它的方法在它的右边。
我希望这个简短的总结能充分解释它:)
这是一个lambda表达式,它可以用作对象的选择器
当表达式为true时,您可以有条件地选择(或另一个操作orderby、count等)。例如:
假设你有一份人员列表和他们的详细信息:ID、姓名、城市和职业。
您可以使用lambda搜索特定的ID:来选择一个人
public Person GetByID(int id)
{
Person selectedPerson = people.SingleOrDefault(person => person.ID == id);
return selectedPerson;
}
同样的情况也适用于一个城市的选择,这将是:
public List<Person> GetByCity(string city)
{
List<Person> selectedPeople = people.where(person => person.City == city);
return selectedPeople;
}
lamda表达式是放置运算变量的位置,因此在这些情况下,它是选择数据的条件。你可以用同样的方式将其用作orderby变量,在下一个例子中,我使用两个lamda来执行两个独立的函数
public List<Person> GetByCity(string city)
{
List<Person> selectedPeople = people.where(person => person.city == city)
.OrderByDescending(person => person.Name);
return selectedpeople;
}
我希望这对有帮助
x => x.y
是C#3.0中引入的Lambda表达式。一般语法为
参数=>执行代码
Lambda表达式有三个部分:
- 左侧的x是参数。这可以是一个变量、委托或匿名函数
- =>读作"转到",用作分隔符
- x.y是要计算的表达式
例如,lambda表达式x=>x*x指定了一个名为x的参数,并返回x的平方值(来源:MSDN)。
希望这对你有帮助。
它们被称为Lamda表达式:
https://msdn.microsoft.com/en-us/library/bb397687.aspx
var Results = UserFavoritesContext.UserFavorites.Select(color => color.FavoriteColor);
类似于:
List<UserFavorite> Results = new List<UserFavorite>();
foreach(var item in UserFavorites)
{
Results.Add(item.FavoriteColor);
}
这不是Linq特有的。
这是编写lambda表达式的方法。箭头=>是lambda参数与其正文之间的分隔符。