次の短いコード行をより一般的な方法で記述しようとしています。
私が達成したいのは、特定の日付以降に変更または作成されたレコードの単純な数です。
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);
}
上記のサンプルを次のようなより一般的な関数に変更したい
public int GetChanges(MetaTable table, string columnName, DateTime LastActivityDate)
{
return table.Count(row => row.columnName > LastActivityDate);
}
今まで試したことは
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 ;
}
問題は、「whereCall」が正しくなく、(ドイツ語の) エラーをスローすることです。どのように見える必要がありますか?
ご協力いただきありがとうございます。セバスチャン
詳細情報: これはドイツ語のエラーです:
'LINQ to Entities' の概要は、Instanzen konstruiert werden と同じように、IQueryable-Schnittstelle の実装に使用されます。パラメータ名: 式