0

次の短いコード行をより一般的な方法で記述しようとしています。

私が達成したいのは、特定の日付以降に変更または作成されたレコードの単純な数です。

    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 の実装に使用されます。パラメータ名: 式

4

1 に答える 1

1

動的 linq クエリ ライブラリを使用してこれを実行できる場合があります。句を文字列として渡すことができます。例: (出典: scottgu.com )代替テキスト

詳細については、Scott Gu のブログを参照してください。

于 2009-05-22T17:46:48.197 に答える