簡體   English   中英

如何動態創建以下LINQ表達式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM