LINQ 查询中的"=>"登录是什么?



令人惊讶的是,关于这方面的信息如此之少。我找到了大量解释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表达式有三个部分:

  1. 左侧的x是参数。这可以是一个变量、委托或匿名函数
  2. =>读作"转到",用作分隔符
  3. 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参数与其正文之间的分隔符。

最新更新