因此,經過幾小時的工作對這個問題(和我們的朋友谷歌的幫助),我找到了一個可行的解決方案,我的問題。我創建瞭如下的Linq表達式擴展:
using System;
using System.Linq;
using System.Linq.Expressions;
namespace MyCompany.MyApplication
{
public static class LinqExtensions
{
public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Expression<Func<TSource, bool>> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}
}
}
這個擴展允許LINQ查詢到這樣創建:
var products = context.Products.WhereIf(!String.IsNullOrEmpty(name), p => p.Name == name)
.WhereIf(startDate != null, p => p.CreatedDate >= startDate)
.WhereIf(endDate != null, p => p.CreatedDate <= endDate);
這使得每個WhereIf語句隻影響結果是否符合規定條件。解決方案似乎有效,但我總是接受新的想法和/或建設性的批評。
太棒了!謝謝! – 2012-03-21 20:07:52
+1非常有用的一點點代碼。 – 2013-05-29 18:09:36
我們可以使用in-buil where()。where()但爲什麼應該有人使用你的擴展?那裏有什麼特別的? – 2018-02-11 19:00:48