簡體   English   中英

LINQ 使用 OR 選擇多個條件

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

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