私のアプリケーションでは、プロパティ名とプロパティ値を持つバックエンドに 'Filter'オブジェクトを渡します。プロパティ文字列名に基づくefとの動的比較
私は、動的に行うために、インターネット上で、次のコードを見つけましたが、EF
私は、このように呼んでpublic static IOrderedQueryable<T> Contains<T>(this IQueryable<T> queryable, string propertyName, string propertyValue)
{
var parameterExp = Expression.Parameter(typeof(T), "type");
var propertyExp = Expression.Property(parameterExp, propertyName);
var method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var someValue = Expression.Constant(propertyValue, typeof(string));
var containsMethodExp = Expression.Call(propertyExp, method, someValue);
var expression = Expression.Lambda<Func<T, bool>>(containsMethodExp, parameterExp);
var expcall = Expression.Call(typeof(Queryable), "Where", new[] {typeof(T)}, queryable.Expression,Expression.Quote(expression));
return (IOrderedQueryable<T>)queryable.Provider.CreateQuery<T>(expcall);
}
に含まれています:
query = query.Contains(filter.Property, (string)filter.Value);
は、今私は同じことを見つけようとしています
query = query.Where(x => x.Status == filter.Value);
x.Statusはそう
列挙型です。これを行うための比較query = query.Where(x => x.Status.Equals(filter.Value));
をスロータイプの一定の値を作成できません 'のSystem.Object'。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています
intにキャストしても、
は、だから私は、等号の代わりに「==」を実行する必要がありますが、私は、メソッド名を指定せずに1が含まれていますように含まれていたり等しいのような方法を構築する方法を知らない私が欲しいもの
、このような何か:
query = query.IsTheSame(filter.Property, (Status)filter.Value);
動作していないコードを含めてくださいと方法を説明しますコンパイルエラー?ランタイム例外?間違った結果?...?) – Richard