【问题标题】:linq to entities expression tree where on anonymous typelinq 到匿名类型的实体表达式树
【发布时间】:2016-10-23 22:19:22
【问题描述】:

我正在尝试创建一个过滤器来搜索基本查询的一个或多个列。它有效,问题是我 100% 确定它不是最优的,因为查询是呈现的并且搜索是通过代码执行的(而不是通过 MSSQL)

所以我的问题是:我可以通过表达式树(不熟悉它)来执行此操作,以便在数据库端生成查询吗?

p.s:我不想使用动态 LINQ

谢谢!

 var basequery = (from x in db.table1
                             join x1 in db.table2 on x.id equals x1.someid
                             where x.deleted != null && x.moreCondition = "blah"
                             select new {
                                 x.field1,
                                 x.fiedl2
                                 x2.field1,
                                 x2.field3
                             });

对基本查询应用过滤器以搜索每一列:

foreach (var item in Columns)
{

     basequery = basequery.AsEnumerable()
    .Where(i => (i.GetType().GetProperty(item.Data)
        .GetValue(i, null) ?? string.Empty).ToString().ToUpper().Contains(item.Search.Value.ToUpper())).AsQueryable();
}

【问题讨论】:

标签: c# linq


【解决方案1】:

您需要构建表达式树,结合基于列列表的过滤谓词。但是,您需要构建过滤器表达式,而不是像您介绍的那样做,直到使用其中一种实现方法时才会实现。

这里有一个很好的例子,如何使用表达式树来构建动态查询:https://msdn.microsoft.com/en-us/library/mt654267.aspx

如果您想获得一些现成的解决方案,只需尝试如下所述的 PredicateBuilder: http://www.albahari.com/nutshell/predicatebuilder.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多