[英]How do i create the following LINQ expression dynamically?
我需要將以下C#代碼轉換為有效的Entity Framework 6表達式:
(f => f.GetType().GetProperty(stringParamter).GetValue(f).ToString() == anotherStringParameter)
這個家伙是為“排序依據”部分完成的,但是我似乎無法為“哪里”部分搞清楚...
一般而言,我要在這里實現的是一種動態查詢形式,用戶將“選擇”屬性以在“投遞箱”中進行過濾,提供過濾值並命中查詢...通常人們喜歡f => f.TargetProp == userValue
但是當我不知道它是哪一個時我無法做到這一點...
您需要構造表示對該屬性的訪問的表達式樹:
public static Expression<Func<T, bool>> PropertyEquals<T>(
string propertyName, string valueToCompare)
{
var param = Expression.Parameter(typeof(T));
var body = Expression.Equal(Expression.Property(param, propertyName)
, Expression.Constant(valueToCompare));
return Expression.Lambda<Func<T, bool>>(body, param);
}
這使您可以編寫:
query = query.Where(PropertyEquals<EntityType>(stringParameter, anotherString));
您是否考慮過使用動態鏈接庫? 它允許您將表達式組成為字符串,而不是lambda表達式。
例子:
var query = baseQuery.Where("Id=5");
var query = baseQuery.Where("Id=@0", 5);
如果您有興趣,我一直在https://github.com/NArnott/System.Linq.Dynamic上保留Microsoft Dynamic Linq示例的更新版本,並且在NuGet上也可以使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.