Möglichkeiten zu nutzen, Func T, bool, während der Verwendung einer LINQ-Repository
Fand ich viele Beispiele von generischen repository verwenden von LINQ to SQL. Allerdings gibt es nicht genügend Beispiele darüber, wie diese Funktionen aufrufen. Können Sie bitte ein Beispiel zur Verwendung der folgenden Funktionen, die von einem client?
Hinweis: Meine Frage ist über die Verwendung von Func T,bool. Was sind die Möglichkeiten es zu benutzen?
Hinweis: das Konto ist eine Einheit.
class MyRepository<T> : IRepository<T> where T : class
{
..........
public IEnumerable<T> FindAll(Func<T,bool> predicate)
{
return Context.GetTable<T>().Where(predicate);
}
public T FindByID(Func<T,bool> predicate)
{
return Context.GetTable<T>().SingleOrDefault(predicate);
}
}
BEARBEITEN
Basierend auf der Antwort, ich habe es wie folgt;
public RepositoryLayer.Account FindFirstAccount()
{
Func<RepositoryLayer.Account, bool> predicate = (p => p.AccountNumber == 1);
List<RepositoryLayer.Account> accList = (accountRepository.FindAll(predicate)).ToList();
return accList[0];
}
Hinweis: Die Liste RepositoryLayer.Konto accList = (Liste RepositoryLayer.Konto) accountRepository.FindAll(Prädikat); wird nicht funktionieren
- nur ein detail : wenn
Context.GetTable<T>
gibt einIQueryable<T>
die parameter von FindAll sollte einExpresson<Func<T, bool>>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar Möglichkeiten, um anzugeben, Func, was ist im wesentlichen ein
delegate
nimmt einen parameter und gibt einen booleschen Wert.Der bequemste Weg, in den meisten Situationen ist geben Sie es als eines Lambda-Ausdrucks, wie:
Den anderen Möglichkeiten, die Angabe von Func sind am besten beschrieben hier.
BEARBEITEN:
Um das neueste Fehler, müssen Sie die Ergebnisse als Liste. Entfernen Sie Ihre expliziten cast, und versuchen Sie:
Zum Beispiel:
Einer Func T, bool ist ein Delegat, der akzeptiert einen generischen parameter T und einen bool zurückgibt. In Ihrem Fall würden Sie das repository wie