如何动态地使用LINQ来组织以下查询?

3
我希望能够动态地构建查询,如下所示:

2)

Select col1, Sum(col2)
    from t1
    where col3 = 1
      and co11 between '01 jan 2009' and '31 dec 2013'
    group by co11

2)我想在2012年(linq to entity)将上述内容表达如下:

 " select "+ @selectclause + " from t1  where " + whereclause

有人建议我可以使用http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx来制定上述查询。是否有人能够使用System.linq.DynamicSystem.Linq.Expression进行制定?由于时间不足,我无法完成。
我试图使用System.Linq.dynamic实现以下内容:
var var1 = context.table1.Where(strWhereClause)
.Where(i => i.co11  >= dtDateFrom && i.co11  <= dtDateTo).GroupBy("new(" + varGroupBy + ")").Select("new(" + varAggregateCol + ")");

请告诉我,如果我的一堆查询可以由System.Linq.Expression来制定,那么我应该使用System.Linq.Dynamic还是应该优先考虑System.Linq.Expression

谢谢!


1
DynamicLinq 是最好最简单的解决方案!创建表达式树太复杂了... - Mahmoud Moravej
你当前的解决方案中有什么问题没有得到解决? - Grundy
我尝试了很多方法,但是没有成功,同时我正在尝试其他的方法。 - user3129097
请建议如果有任何答案,我正在使用VS 2012。 - user3129097
请告诉我,我能否将2013年的system.Linq.Dynamic用于2012年? - user3129097
你可以尝试使用 https://github.com/dkackman/SqlLinq。这是一个实验性质的工具,但应该能够解析提供的 SQL,假设你是在谈论对象的 Linq。 - dkackman
1个回答

0

以下是一个示例,展示了这是什么样子:

var query = t1.Where("col3 = 1 AND col1 >= @0 AND col1 <= @1", dtDateFrom, dtDateTo)
            .GroupBy("col1")
            .Select(varAggregateCol)

虽然标准的动态 Linq 库只返回一个难以使用的 IQueryable,但我一直在维护一个更新的库(https://www.nuget.org/packages/System.Linq.Dynamic.Library),它返回 IQueryable{dynamic}(假设您正在使用 .NET 4.0+),使您可以轻松地动态访问结果成员。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接