我有一個表單上有多個字段(公司名稱,郵編等),它允許用戶搜索數據庫中的公司。如果用戶在多個字段中輸入值,那麼我需要搜索所有這些字段。我正在使用LINQ來查詢數據庫。如何將LINQ表達式合併爲一個?
到目前爲止,我已經設法編寫一個函數,它將查看它們的輸入並將其轉換爲表達式列表。我現在想把這個List變成一個單一的表達式,然後我可以通過LINQ提供程序執行。
我最初的嘗試是如下
private Expression<Func<Company, bool>> Combine(IList<Expression<Func<Company, bool>>> expressions)
{
if (expressions.Count == 0)
{
return null;
}
if (expressions.Count == 1)
{
return expressions[0];
}
Expression<Func<Company, bool>> combined = expressions[0];
expressions.Skip(1).ToList().ForEach(expr => combined = Expression.And(combined, expr));
return combined;
}
但是這個失敗的線沿線的異常消息「二元運算符,而不是用於定義...」。有沒有人有任何想法我需要做的結合這些表達式?
編輯:更正了我忘記將結果和表達式一起分配給一個變量的行。感謝您指出這些人。
@Jon Skeet:'combined'將被鍵入爲'Expression';你需要做一些工作來將它作爲'Expression>'返回。 –
jason
2009-12-17 15:58:18
我同意你的第一個代碼更容易理解,所以我會做出這個正確的答案。但是我實際上要使用第二個片段,因爲這正是我需要的 - 我讓事情太複雜,謝謝喬恩。 – gilles27 2009-12-17 15:59:17
具有諷刺意味的是,我在編輯這兩條評論的同時也進行了編輯 - 但是因爲這是使用的第二個片段,所以我認爲我會保留原樣:) – 2009-12-17 16:00:24