Entity Framework Dynamische Where-Klausel

c# entity-framework generics

Frage

Ich habe eine Anfrage wie:

var function = GetSomeExpression();    

using (FooModel context = new FooModel())
{
    var bar = context.Bar.Where(function);
}

Ich möchte eine generische Methode erstellen, die Where gegen verschiedene Entitäten im Kontext ausführen kann. Das Ziel besteht nicht darin, den Kontext auszuführen. Bar. Wo, Kontext. Auto. Wo, Kontext. Weit, wohin usw.

Etwas, das nicht möglich ist, aber das Ziel veranschaulicht, ist:

var q = context.GetObjectContext(T).Where(queryFunction);

Ich habe mit Relfection nachgesehen und kann die Where-Methode abrufen, weiß jedoch nicht, wie sie mit dem Kontext ausgeführt werden soll, der im Delegaten übergeben wird. Ich habe mir auch DynamicMethod angesehen, aber das ganze IL-Ding zu machen mag nicht ansprechend sein.

Was ich bisher habe:

private List<T> GetResults<T>(Expression<Func<T, bool>> queryFunction)
{
    // note: first() is for prototype, should compare param type
    MethodInfo whereMethod = typeof(Queryable).GetMethods()
        .Where(m => m.Name == "Where")
        .First().MakeGenericMethod(typeof(T)); 

    // invoke the method and return the results
    List<T> result = whereMethod.Invoke(
    // have the method info
    // have the expression
    // can reference the context 
    );

    throw new NotImplementedException();
}

Ist das möglich?

Akzeptierte Antwort

Das ist viel einfacher als das, was ich vorher versucht habe:

private List<T> GetResults<T>(IQueryable<T> source, 
    Expression<Func<T, bool>> queryFunction)
{
   return source.Where(queryFunction).ToList<T>();
}

Beliebte Antwort

siehe diesen Beitrag

LINQ-zu-Entitäten - Erstellen von Klauseln zum Testen von Sammlungen in vielen Beziehungen

Edit : nach Ihrem Post-Update scheint das nicht mehr relevant zu sein; Ich lass es, falls es hilfreich ist.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum