我正在努力LINQ为我们的Web应用程序中的几个报告重构一些查询,并且我试图将一些重复的查询谓词移动到他们自己的IQueryableexension方法中,以便我们可以将它们重用于这些报告,并在将来报告.正如您可能推断的那样,我已经为组重构了谓词,但是代码的谓词给了我一些问题.这是我到目前为止报告方法之一的一个例子:
DAL方法:
public List<Entities.QueryView> GetQueryView(Filter filter)
{
using (var context = CreateObjectContext())
{
return (from o in context.QueryViews
where (!filter.FromDate.HasValue || o.RepairDate >= EntityFunctions.TruncateTime(filter.FromDate))
&& (!filter.ToDate.HasValue || o.RepairDate <= EntityFunctions.TruncateTime(filter.ToDate))
select o)
.WithCode(filter)
.InGroup(filter)
.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
IQueryable 延期:
public static IQueryable<T> WithCode<T>(this IQueryable<T> query, Filter filter)
{
List<string> codes = DAL.GetCodesByCategory(filter.CodeCategories);
if (codes.Count > 0)
return query.Where(Predicates.FilterByCode<T>(codes));
return query;
}
Run Code Online (Sandbox Code Playgroud)
谓语:
public static Expression<Func<T, List<string>, bool>> FilterByCode<T>(List<string> codes)
{
// Method info for List<string>.Contains(code). …Run Code Online (Sandbox Code Playgroud)