小编Gar*_*tes的帖子

使用List <T> .Contains方法为LINQ构建表达式树

问题

我正在努力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)

c# linq entity-framework expression-trees

5
推荐指数
1
解决办法
9398
查看次数

标签 统计

c# ×1

entity-framework ×1

expression-trees ×1

linq ×1