LINQ筆記:使用LINQ進行可選擇化聯集條件(AND)的設計手法
之前有發過一篇類似的文章,不過針對的是SQL Parameter的情境,時至今日轉移到LINQ的環境,用同樣的邏輯在實作一次。
能否用一次性的語法,就把多重條件的查詢完成?
講白一點的就是說,在查詢來源端可能多重條件的情況下,能否有一個條件式就把這個問題解決,答案是可以的,前提就是要利用一些邏輯的小技巧。
舉例來說,來源端可能給查詢的函式單一值(查詢帳號符合),也有可能給多重值(查詢帳號與密碼符合),那我我們可以用下列的LINQ程式碼來完成這種多條件的查詢。
List<User> oData = new List<User>()
{
new User() { cAccount = "John", cPassword = "1234" },
new User() { cAccount = "Marry", cPassword = "5678" },
new User() { cAccount = "Tom", cPassword = "9012" },
new User() { cAccount = "Adam", cPassword = "3456" }
};
//假設這邊是由外部輸入引數,且條件不一(有些有給,有些沒給)
string cAcc = "John";
string cPwd = "1234";
var oResult = oData
.Where(x =>
( x.cAccount == cAcc )
&&
(
string.IsNullOrEmpty(cPwd) ||
x.cPassword == cPwd
)
);
WriteLine(oResult.Any() ? $"找到{oResult.Count()}筆資料。" : "找不到資料。");
稍微做一下程式碼的解說:
如果你輸入cAcc且cPwd為空值的話,那麼LINQ的語句執行只會幫你做到cAcc這個條件的搜尋而已,而cPwd因為「string.IsNullOrEmpty(cPwd)」這個條件成真,後面又是加上快速Or邏輯,在判定成true的情況下,「x.cPassword == cPwd」這個語句就被自然的跳開不執行了。
很有趣也很簡潔的一種寫法,希望對看到此篇文章的您有幫助。
在使用SQL Parameter的情況下,進行可選擇化聯集條件(AND)的設計手法