簡體   English   中英

如何使用動態OR語句構建Linq查詢?

[英]How can I build Linq query with dynamic OR statements?

以下代碼:

var dynamicQuery = from a in _context.Users select a;
string[] args = new string[] { "aa", "bb", "cc" };
foreach (string word in args)
    dynamicQuery = dynamicQuery.Where(x => x.Name.Contains(word));
return dynamicQuery.ToList();

將允許我使用AND表達式的動態列表創建Linq查詢。

但是假設我想做同樣的事情,只有動態的OR表達式列表?

你根本不需要循環:

return _context.Users.Where(x => args.Any(word => x.Name.Contains(word)));

編輯:更一般地說,您可以使用:

Func<User, bool> predicate = user => false;
foreach (var item in items)
{
    var predicateCopy = predicate;
    predicate = user => predicateCopy(user) || someOtherCondition;
}
return query.Where(predicate);

這將導致相當深的堆棧(一個委托調用另一個委托另一個等)。 在特定情況允許您使用Any情況下,這通常是更好的方法。

我希望Any可以在大多數情況下工作,你有一些可能與之匹配的項目......非Any方法都適用於“在某些情況下,18歲以上的人都很好......在某些情況下,任何人都可以姓氏以“G”開頭的名稱是合適的,等等。

暫無
暫無

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

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