【问题标题】:Dynamic linq syntax for subquery子查询的动态 linq 语法
【发布时间】:2014-05-29 22:23:26
【问题描述】:

我想在动态 LINQ 中进行以下查询。我尝试了一些解决方案,但还没有成功。

 select
    SUM([Value1]) AS [Sum]
        ,[Dim1] AS [Primary], 
        [Dim2] AS [Secondary]
    from
    (
        SELECT 
          value1, dim1, dim2
        FROM [BudgetLine]
        WHERE [BudgetID] = 4
    ) as a
    GROUP BY [Dim1], [Dim2]

我当前的代码看起来像这样,但我需要重写它以提供上面的 SQL。

    var query = (DatabaseConnection.DataMemoryContext.GetTable<BudgetLineEntity>().AsQueryable()
    .Where(String.Format("BudgetID={0}",filter.BudgetId))
    .GroupBy(String.Format("new({0},{1})",primaryDimension.Name,secondaryDimension.Name), "new(Value1)")
    .Select(String.Format("new (Key.{0} as Primary, Key.{1} as Secondary, Sum(Value1) as Sum)",primaryDimension.Name,secondaryDimension.Name)));

primaryDimension.Name 和 SecondaryDimension.Name 包含要分组的列的名称。

【问题讨论】:

  • 你永远不会得到那个确切的代码,LINQ 会使用范围和很多别名等,所以据我所知,得到那个确切的代码是不可能的
  • 好的,我能得到类似的吗?

标签: c# sql linq linq-to-sql dynamic-linq


【解决方案1】:

考虑在您的子查询中查询数据库,然后将结果存储在一个数据表中,然后您可以根据该数据表进行计算。

SELECT 
value1, dim1, dim2
FROM [BudgetLine]
WHERE [BudgetID] = 4

MSDN article - Compute

【讨论】:

  • 谢谢,实际上我最终做到了(将您提到的查询结果保存在数据库表中并在其上运行动态 LINQ)。它使查询执行时间缩短了大约 20%,所以我很满意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多