Что такое знак "=>" в запросах LINQ?

Удивительно, как мало информации об этом. Я нашел множество учебников, объясняющих LINQ, но они не объясняют этот конкретный оператор:

var Results = UserFavoritesContext.UserFavorites.Select(color => color.FavoriteColor);

" x => xy "

Может кто-нибудь объяснить, как это работает? Я получаю общий синтаксис и могу использовать его для создания запросов, но мне нравится делать что-то, не зная, что вы делаете.

Ответы

Ответ 1

Предположим, у вас есть список 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 => xy в основном говорит "для каждой обрабатываемой переменной (пусть ее называют x), выполните следующую операцию на ней (xy, получите свойство y)"

Надеюсь, это объяснит это.

редактировать
Как комментатор, который теперь удалил упомянутый комментарий, это не используется исключительно в LINQ. Выражение лямбда не требует итерации над IEnumerable, его можно использовать для обработки одного элемента.
Однако LINQ на сегодняшний день является самым распространенным местом для встречи с лямбдами, и я считаю, что их использование очень похоже на цикл foreach, поэтому я выбрал этот пример.

Ответ 2

Оператор => используется в лямбда-выражениях.

Лучший способ подумать об этом - это тип синтаксиса для написания функции, где левая часть оператора является параметром для функции, а правая сторона является телом функции, например, это допустимое использование выражения лямбда где его используют как функцию:

Func<int, int> incrementFunction = i => i + 1;
int incrementedNumber = incrementFunction(1);

Имя я в этом случае является произвольным именем переменной, например, так же, как вы бы назвали параметр ввода функций. Заметьте, мне не нужно было объявлять тип входных параметров, потому что компилятор сделает это. Также обратите внимание, что мне не нужно включать ключевое слово "возвращение" или заключить тело функции в блок кода. Это необязательно требует каких-либо параметров, например:

Action myAction = () => Console.Write("something");
myAction();

Когда вы используете его в выражении linq, подумайте об этом, как будто функция лямбда вызывается для каждого элемента в коллекции (что, я считаю, именно то, что происходит с linq для объектов).

Ответ 3

Это синтаксис выражения Лямбды. Если это поможет вам запомнить... в двух словах, аргумент для передачи (параметр) находится слева от =>, и используемый им метод находится справа от него.

Надеюсь, это краткое резюме объясняет это достаточно :)

Ответ 4

Это выражение лямбда, и оно может использоваться как селектор от объекта

Вы можете условно выбрать (или другую операцию orderby, count и т.д.), Когда выражение истинно. Например:

Скажем, у вас был список людей и их данные: 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 так же, как в следующем примере я использую два ламды для выполнения двух отдельных функций

public List<Person> GetByCity(string city)
{
List<Person> selectedPeople = people.where(person => person.city == city)
.OrderByDescending(person => person.Name);
return selectedpeople;
}

Я надеюсь, что это вообще поможет

Ответ 5

x => xy - выражение Lambda, введенное с С# 3.0. Общий синтаксис

параметр => код исполнения

Выражение лямбда имеет 3 части:

  1. x в левой части - параметр. Это может быть переменная, делегат или анонимная функция.
  2. => читать как "идет", который действует как разделитель
  3. xy - это выражение для оценки.

Например, выражение лямбда x => x * x указывает параметр с именем x и возвращает значение квадрата x (источник: MSDN).

Надеюсь, это поможет вам.

Ответ 6

Они называются выражениями Ламды:

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);
}

Ответ 7

Это не относится к Linq.

Это то, как вы пишете лямбда-выражение. Стрелка => является разделителем между вашими лямбда-параметрами и его телом.