使用EF动态创建GroupBy和Select

时间:2014-10-14 16:18:00

标签: c# entity-framework

我正在处理一个非常大的SQL视图(50多列)。为了确保我获得正确的数据,我必须选择列的子集(4或5列)并按该子集进行分组。 (否则我将返回额外的数据)。这意味着我写了很多查询,所有这些查询非常相似,只有很小的差异。

我目前正在运行我的查询

 var result = this.UtilContext.MassiveView
    .GroupBy(g => new
    {
        g.id,
        g.Value1,
        g.Value2,
        g.Value3
    }).Where(c => c.Key.id == SomeID)
    .AsNoTracking()
    .Select(x => new
    {
        id = x.Key.id,
        Value1 = x.Key.Value1,
        Value2 = x.Key.Value2,
        Value3 = x.Key.Value3
    }).ToList()

是否可以动态创建GroupBy和Select语句(应用程序已经知道它需要哪些列)。我正在寻找一个基于代码的approch,创建一个select语句不是我在这里寻找的。

1 个答案:

答案 0 :(得分:2)

您可以构建表达式树并动态创建linq语句。

this post中,查看Jorrit Steetskamp的答案,为group by及其用法创建表达式树。

您也可以像this post建议的那样为select语句执行某些操作。

另一个选项可能是ESQL(实体Sql),它使用更像sql语法来执行对DB的查询。 Check this for example