Użyj wyrażenia lambda
MyClass result = list.Find(x => x.GetId() == "xy");
Uwaga: język C # ma wbudowaną składnię właściwości. Zamiast pisać metody pobierające i ustawiające (do czego przyzwyczaiłeś się w Javie), napisz
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
jest kontekstowym słowem kluczowym znanym tylko z metody dostępu set. Reprezentuje wartość przypisaną do właściwości.
Ponieważ ten wzorzec jest często używany, C # zapewnia właściwości implementowane automatycznie . Są krótką wersją powyższego kodu; jednak zmienna zapasowa jest ukryta i niedostępna (jest jednak dostępna z poziomu klasy w VB).
public string Id { get; set; }
Możesz po prostu użyć właściwości tak, jakbyś uzyskiwał dostęp do pola:
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
Korzystając z właściwości, można wyszukiwać elementy na liście w ten sposób
MyClass result = list.Find(x => x.Id == "xy");
Jeśli potrzebujesz właściwości tylko do odczytu, możesz również użyć właściwości zaimplementowanych automatycznie:
public string Id { get; private set; }
Umożliwia to ustawienie Id
wewnątrz klasy, ale nie z zewnątrz. Jeśli chcesz ustawić ją również w klasach pochodnych, możesz również chronić metodę ustawiającą
public string Id { get; protected set; }
I wreszcie, możesz zadeklarować właściwości jako virtual
i przesłonić je w klasach pochodnych, co pozwoli ci zapewnić różne implementacje dla metod pobierających i ustawiających; tak jak w przypadku zwykłych metod wirtualnych.
Od C # 6,0 (Visual Studio 2015, Roslyn) można pisać właściwości automatyczne tylko do pobierania za pomocą inicjatora wbudowanego
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
Zamiast tego można również zainicjować właściwości tylko pobierające w konstruktorze. Getter tylko auto-właściwości są prawdziwymi właściwości tylko do odczytu, w przeciwieństwie do auto-wdrożone właściwości z prywatnym seter.
Działa to również z właściwościami automatycznymi do odczytu i zapisu:
public string Id { get; set; } = "A07";
Począwszy od języka C # 6,0 można również zapisywać właściwości jako elementy członkowskie zawierające wyrażenia
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
Zobacz: Platforma kompilatora .NET („Roslyn”)
Nowe funkcje językowe w C # 6
Począwszy od języka C # 7.0 , zarówno getter, jak i setter, można zapisać za pomocą treści wyrażeń:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
Zauważ, że w tym przypadku ustawiacz musi być wyrażeniem. To nie może być stwierdzenie. Powyższy przykład działa, ponieważ w C # przypisanie może być używane jako wyrażenie lub jako instrukcja. Wartość wyrażenia przypisania to przypisana wartość, w przypadku której samo przypisanie jest efektem ubocznym. Pozwala to na przypisanie wartości do więcej niż jednej zmiennej naraz: x = y = z = 0
jest równoważne x = (y = (z = 0))
i ma taki sam efekt jak instrukcje x = 0; y = 0; z = 0;
.
Następna wersja języka, C # 9.0, prawdopodobnie dostępna w listopadzie 2020 r., Pozwoli na właściwości tylko do odczytu (lub lepiej zainicjuj raz), które można zainicjować w inicjatorze obiektu. Obecnie nie jest to możliwe w przypadku właściwości tylko pobierających.
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
wiedziałoby już, że szukasz klucza podstawowego. Tylko dla informacji.return object.property = value
vsreturn object.property == value
lub jeśli jest tylko jeden i chcesz wymusić, że coś takiego
SingleOrDefault
może być tym, czego chceszźródło
Próbować:
źródło
Lub jeśli nie wolisz używać LINQ , możesz to zrobić w oldschoolowy sposób:
źródło
Możesz także użyć rozszerzeń LINQ :
źródło
MyClass result = list.First(m => m.GetId() == id);
Możesz rozwiązać swój problem najbardziej zwięźle za pomocą predykatu napisanego przy użyciu składni metody anonimowej:
źródło
źródło
Możesz utworzyć zmienną wyszukiwania, aby przechowywać kryteria wyszukiwania. Oto przykład użycia bazy danych.
Tutaj "var query" generuje kryteria wyszukiwania, które podajesz za pomocą zmiennej wyszukiwania. Następnie „DuePaymentstring.Select” wybiera dane pasujące do podanych kryteriów. Nie wahaj się zapytać, czy masz problem ze zrozumieniem.
źródło