[英]LINQ select with more than one condition using OR
我將把一個 List 傳遞給 linq 進行搜索
例如:
List<string> test = new List<string> {"a","b","c","d"}
var list = db.table.where(t => t.testName.Contains(test)).toList;
我希望我可以選擇所有 testName 為 a / b / c / d 的記錄。 在 SQL 語句中,它應該是
select * from table where testName = 'a' OR testName = 'b' OR testName = 'c' OR testNmae = 'd'
在實際程序中,列表是動態的,因此可以確保大小為 1 或 99。
但是當我嘗試使用 .Contains 時,它會拋出包含無法將 List 轉換為字符串的錯誤。
您有一個List<string>
,並且您想測試一列以查看它(一個string
)是否包含與您的List
中的任何內容匹配的子字符串。 所以試試
var list = db.table.Where(t => test.Any(t.testName.Contains)).ToList();
如果你想檢查是否有任何實際上相等,然后使用
var list = db.table.Where(t => test.Any(tt => t.testName == tt)).ToList();
唉,你忘了給我們db.Table
的類型,但它似乎返回了一系列相似的對象,其中每個對象都有一個字符串屬性TestName
。 為了使討論更容易,假設您的表包含Tests
,表的每一行都是一個Test
,每個Test
都有一個字符串屬性TestName
。
給定字符串序列的要求,給我表中的所有測試,這些測試的 TestName 等於字符串序列中的一個元素。
在您的代碼db.table.where(t =>
每個 t 是一個測試。
因此,您只想保留那些在字符串序列中具有名稱的測試:
var requiredTestNames = new List<string> {"a","b","c","d"};
var testsWithRequiredTestName = db.Table
.Where(test => requiredTestNames.Contains(test.TestName))
.ToList();
用一句話來說:
我有一系列必需的測試名稱。 從填充了測試的表中,僅保留那些在 requiredTestNames 中具有值 test.TestName 的測試。
順便說一句:您是否看到通過使用標識符來描述它們的含義,正確使用單數和復數名詞,代碼的可讀性要好得多,並且看起來更符合您的要求?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.