2009-04-28 16 views
0

Ich versuche, die folgende kurze Zeile des Codes in einer allgemeineren Weise zu schreiben.Dynamische LINQ to Entity Count()

Was ich erreichen möchte, ist eine einfache Anzahl von Datensätzen, die seit einem bestimmten Datum geändert wurden oder erstellt wurden.

public int GetChanges(DateTime LastActivityDate) 
    { 
     KHS.Innopas.Web.Library.DataModels.Documentation.DocumentationEntities ctx = 
      new KHS.Innopas.Web.Library.DataModels.Documentation.DocumentationEntities(); 

     return ctx.Images.Count(row => row.CreatedAt > LastActivityDate); 
    } 

Ich möchte oben auf eine allgemeinere Funktion wie

public int GetChanges(MetaTable table, string columnName, DateTime LastActivityDate) 
    { 
     return table.Count(row => row.columnName > LastActivityDate); 
    } 

die Probe ändern, was ich jetzt versucht, bis

ist
public int GetChanges(MetaTable table, string columnName, DateTime lastActivityDate) 
    { 
        // query = {Table(LanguageText)} 
     var query = table.GetQuery(); 

     MetaColumn dateColumn; 
     table.TryGetColumn(columnName,out dateColumn); 

     if (dateColumn == null) 
      return new string[] {}; 

     var entityParam = Expression.Parameter(table.EntityType, "row"); 

     var property = Expression.Property(entityParam, dateColumn.Name); 

     var columnLambda = Expression.Lambda(property, entityParam); 

     var constant = Expression.Constant(lastActivityDate); 

     var GreaterThanCall = Expression.GreaterThan(columnLambda.Body, constant); 

     var whereLambda = Expression.Lambda(GreaterThanCall, entityParam); 


     var whereCall = Expression.Call(
      typeof(Queryable), 
      "Count", 
      new Type[] { query.ElementType }, 
      query.Expression, 
      whereLambda); 

     var result = query.Provider.CreateQuery(whereCall); 

     return result ; 
    } 

Das Problem ist jetzt, dass ‚whereCall‘ ist falsch und wirft einen (deutschen) Fehler. Irgendwelche Ideen, wie es aussehen muss?

Danke für Ihre Hilfe. Sebastian

Weitere Informationen: Dies ist der Deutsch-Fehler:

Abfrageausdrücke für 'LINQ to Entities' können nur aus Instanzen konstruiert werden, die die IQueryable-Schnittstelle implementieren. Parametername: expression

Antwort

Verwandte Themen