LINQ sorgularında "=>" işareti nedir?

Bu konuda ne kadar az bilgi olduğu şaşırtıcı. LINQ’u açıklayan tonlarca ders buldum, ancak bu operatörü açıklamıyorlar:

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

"x => x.y"

Birisi lütfen bunun nasıl çalıştığını açıklayabilir mi? Genel sözdizimini alıyorum ve sorgu yapmak için kullanabiliyorum, ancak ne yaptığınızı bilmeden bir şeyler yapmak gibi.

10
katma yazar Soner Gönül, kaynak
Bu lambda ifadesi sözdizimidir, şunu kontrol edin: msdn.microsoft.com/en-us /library/bb397687.aspx
katma yazar w.b, kaynak

7 cevap

Bir kişi listesinin bulunduğunu ve bunların üzerinde yineleme yapmak istediğinizi varsayalım. Gibi bir şey yazacaksınız:

foreach(var person in people)
{
       //do something to person
}

Kişi adını nasıl seçtiğinize dikkat edin. Herhangi bir kelime olabilirdi, ama temel olarak "listedeki her öğeyi kişi değişkenim olarak işle" dedin.

Şimdi bu LINQ sorgusuna bakın:

filteredPeopleList = people.Where(person => person.Name == "John");

Yine, temelde, orijinal listedeki her nesne için birer birer yer tutucu adı olarak person 'ı seçtiniz (birer birer). Yukarıdaki Linq sorgusu,

foreach(var person in people)
{
       if(person.Name == "John")
       {
           filteredPeopleList.Add(person);
       }
}

To me, x => x.y is basically saying "for every variable we process (let's call it x), please perform the following operation on it (x.y, get the y property)"

Umarım bu açıklar.

Edit
As a commenter who now deleted his comment mentioned, this isn't exclusively used in LINQ. A lambda expression doesn't have to iterate over an IEnumerable, it can be used to process a single item.
However, LINQ is by far the most common place to encounter lambdas, and I find their use very similar to the foreach loop, which is why I picked this example.

19
katma
Yararlı teşekkürler!
katma yazar Etienne Juneau, kaynak

The => operator is used in lambda expressions.

Bunu düşünmenin en iyi yolu, bir fonksiyon yazmak için bir sözdizimi türüdür; operatörün sol tarafı, fonksiyon için parametrelerdir ve sağ taraf, fonksiyonun gövdesidir; bu, bir fonksiyon gibi kullanıldığı bir lambda ifadesinin geçerli bir kullanımıdır:

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

Bu durumda i adı, isteğe bağlı bir değişken adıdır; tıpkı bir fonksiyon giriş parametresini adlandırdığınız gibi. Uyarı Derleyici çıkacağı için giriş parametreleri türünü bildirmeme gerek yoktu. Ayrıca, "return" anahtar sözcüğünü dahil etmem veya işlev gövdesini bir kod bloğuna dahil etmem gerekmiyor. Örneğin herhangi bir parametreye de ihtiyaç duymaz.

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

Linq ifadesinde kullandığınızda, koleksiyondaki her öğede lambda işlevi çağrılıyormuş gibi düşünün (ki bu, nesnelere linq ile tam olarak ne olduğuna inanıyorum).

3
katma

Bu bir lambda ifadesidir ve bir nesneden seçici olarak kullanılabilir

İfade doğru olduğunda koşullu olarak (veya başka bir işlem sırası, sayma, vb.) Seçebilirsiniz. Örneğin:

İnsanların bir listesini ve ayrıntılarını bulunduğunu söyleyin: Kimlik, İsim, Şehir ve Meslek.

Belirli bir kimliğini aramak için lambda kullanarak tek bir kişi seçebilirsiniz:

public Person GetByID(int id)
{
Person selectedPerson = people.SingleOrDefault(person => person.ID == id);
return selectedPerson;
}

Aynı şehirdeki bir seçim için de geçerli olabilir:

public List GetByCity(string city)
{
List selectedPeople = people.where(person => person.City == city);
return selectedPeople;
}

Lamda ifadesi işlem değişkeninizi yerleştireceğiniz yerdir, bu durumda bu durumlarda verileri seçtiğiniz koşul. Aynı şekilde çok değişken bir sipariş değişkeni olarak kullanabilirsiniz, bir sonraki örnekte iki ayrı işlevi gerçekleştirmek için iki lamda kullanıyorum

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

Umarım bu hiç yardımcı olur

2
katma

x => x.y is Lambda Expression introduced with C# 3.0. The general syntax is

parameter => executioncode

Lambda İfadesi 3 bölümden oluşmaktadır:

  1. x on left hand side is the parameter.This can be a variable,delegate or an anonymous function.
  2. => read as "goes to", which acts as separator
  3. x.y is an Expression to be evaluated.

For example, the lambda expression x => x * x specifies a parameter that’s named x and returns the value of x squared (source: MSDN).

Umarım bu size yardımcı olur.

2
katma

It's the syntax of a Lambda expression. If it helps you to remember... in a nutshell, the argument to pass (the parameter) is on the left of the => and the method(s) that use it are on the right hand side of it.

Umarım bu kısa özeti yeterince açıklar :)

2
katma

Onlara Lamda ifadesi denir:

https://msdn.microsoft.com/en-us/library/bb397687.aspx

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

benzer:

List Results = new List();
foreach(var item in UserFavorites)
{
   Results.Add(item.FavoriteColor);
}
1
katma
Listeden çok bir verim iadesi ... gibi: tembel değerlendirme.
katma yazar Guillaume, kaynak

Bu Linq'e özgü değil.

It is the way you write a lambda expression. The arrow => is the delimiter between your lambda parameters and its body.

1
katma