簡體   English   中英

如何使用 generics 和 Linq 擴展方法過濾列表?

[英]How can I filter a list using generics and Linq extension methods?

我正在嘗試為系統編寫一個通用的過濾器擴展方法,這樣我就可以在任何列表上調用過濾器並傳入字段名稱及其值的字典以進行過濾。

我目前對我的系統中的每種類型都有一種方法,但我正在嘗試合並為一種方法。

到目前為止,這是我所擁有的......簡化了,所以它只是文本搜索:

public static List<T> Filter<T>(this List<T> model, string json)
    {
        JavaScriptSerializer ser = new JavaScriptSerializer();
        Dictionary<string, object> searchFields = (Dictionary<string, object>)ser.DeserializeObject(json);

        foreach (var key in searchFields.Keys)
        {               
            // How do I perform the search?               
        }

        return model;
    }

我當前的過濾器是對每個鍵的 switch 語句並檢查每個字段,如下所示:

switch(key) 
{
    case "Description":
        list = list.Where(x => x.Description.ToLower().Contains(searchFields[key].ToString().ToLower())).ToList();
                    break;
}

如何訪問通用 object 上的屬性來過濾它? 我假設我需要以某種方式進行反思,但我不知道語法。

我正在尋找類似的東西:

list = list.where(listobject.getField(key).contains(value))

這可能嗎? 在此先感謝您的幫助!

在你的foreach循環中嘗試類似的東西

 model.Where(m => typeof(T).GetProperty(key).GetValue(m, null)==searchFields[key]);
foreach (var key in searchFields.Keys)
{               
    model.Where(m => typeof(T).GetProperty(key).GetValue(m, null).Equals(SearchFields[key], StringComparison.OrdianlIgnoreCase);         
}

return model.ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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