因為項目需要使用Linq來查詢數(shù)據(jù),但是在多條件查詢時,需要使用一大堆if(...!=string.empty)等判斷條件感覺不是很優(yōu)雅。網(wǎng)上搜索以下,大概找到了兩種辦法,一種是老外寫的一個類,感覺用著麻煩;還有就是提供一擴展個方法,參數(shù)為某個類型,當調用該方法時,用反射去遍歷這個類型的屬性,再拿動態(tài)查詢參數(shù)和屬性值去比較,然后構建動態(tài)lambda表達式,這個也有缺陷,就是需要遍歷類型的所有屬性,而且構建lambda表達式只能構建==類型表達式,有局限性。所以自己琢磨了一個辦法,調用時只需一行代碼,lambda表達式可以隨意構建,現(xiàn)在進入主題。 假設有一個類型Employee,并且該類型有集合employeeList,有這樣一個基于IEnumerable<T>類型的擴展方法Wheres(稍后介紹),那怎樣用一行代碼employeeList.Wheres(o => o.Name == "a" && o.Salary > 5000 && o.InDate >= DateTime.Now && o.Address.Contains("北京"))去實現(xiàn)如下一堆代碼:
if (!string.IsNullOrEmpty(name)) { employeeList.Where(o => o.Name == name); } if (salary != null)參數(shù)設置為可空 { employeeList.Where(o => o.Name == name); } if (inDate != null) { employeeList.Where(o => o.InDate>=inDate); } if (!string.IsNullOrEmpty(address)) { employeeList.Where(o => o.Address.Contains("北京")); }
新聞熱點
疑難解答