wake-up-neo.com

Suchen, wenn in Linq ein Wert in einer Liste von Objekten vorhanden ist

Angenommen, ich habe eine Klasse customer, die eine Eigenschaft FirstName hat. Dann habe ich eine Liste.

Kann LINQ verwendet werden, um herauszufinden, ob die Liste einen Kunden mit Vorname = 'John' in einer einzigen Anweisung hat .. wie?

189
Tony_Henrich

LINQ definiert eine Erweiterungsmethode, die perfekt zur Lösung dieses Problems geeignet ist:

using System.Linq;
...
    bool has = list.Any(cus => cus.FirstName == "John");

stellen Sie sicher, dass Sie auf System.Core.dll verweisen. Dort wohnt LINQ.

391
zvolkov

die Antwort von zvolkov ist die perfekte, um herauszufinden, if dass es einen solchen Kunden gibt. Wenn Sie danach den Kunden verwenden müssen, können Sie Folgendes tun:

Customer customer = list.FirstOrDefault(cus => cus.FirstName == "John");
if (customer != null)
{
    // Use customer
}

Ich weiß, das ist nicht das, was Sie gefragt haben, aber ich dachte, ich würde eine Folgefrage vorwegnehmen :) (Natürlich findet dies nur den zuerst solchen Kunden ... um alle zu finden, benutze einfach eine normale where Klausel.)

98
Jon Skeet

Eine Option für die Folgefrage (wie Sie einen Kunden finden, der möglicherweise eine beliebige Anzahl von Vornamen hat):

List<string> names = new List<string>{ "John", "Max", "Pete" };
bool has = customers.Any(cus => names.Contains(cus.FirstName));

oder um den Kunden aus der csv einer ähnlichen Liste abzurufen 

string input = "John,Max,Pete";
List<string> names = input.Split(',').ToList();
customer = customers.FirstOrDefault(cus => names.Contains(cus.FirstName));
20
Mike Sackton

Mit Linq haben Sie viele Möglichkeiten, hier ohne Lambdas:

//assuming list is a List<Customer> or something queryable...
var hasJohn = (from customer in list
         where customer.FirstName == "John"
         select customer).Any();
9
jmservera
customerList.Any(x=>x.Firstname == "John")
4
Chris Brandsma

Die Technik, die ich verwendet habe, bevor ich .Any() entdeckte:

var hasJohn = (from customer in list
      where customer.FirstName == "John"
      select customer).FirstOrDefault() != null;
4
Ian Boyd
List<Customer> list = ...;
Customer john = list.SingleOrDefault(customer => customer.Firstname == "John");

john ist null, wenn kein Kunde mit dem Vornamen "John" existiert.

3
M4N

Andere Möglichkeit

if (list.Count(customer => customer.Firstname == "John") > 0) {
 //bla
}
1
Krassi

Versuchen Sie das, ich hoffe es hilft Ihnen.

 if (lstCustumers.Any(cus => cus.Firstname == "John"))
 {
     //TODO CODE
 }
0
Fabio Stratotti