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