如何使用LINQ创建查询的查询



我正在尝试将ColdFusion中使用的查询转换为LINQ和c#。数据来自数据文件,而不是来自数据库。

我转换了第一个查询,但没有线索

  1. 如何使用查询第二个查询

  2. 如何在第二个查询中包含count(PDate)作为DayCount

下面是ColdFusion中使用查询的查询代码:

First query
<cfquery name="qSorted" dbtype = "query">
    SELECT OA, CD,PDate,
    FROM dataQuery 
    GROUP BY CD,OA,PDate,       
</cfquery>
Second query
<cfquery name="qDayCount" dbtype = "query">
    SELECT OA, CD, count(PDate) as DayCount 
    FROM qSorted   // qSorted is from the first query.            
    GROUP BY 
    OA, CD
    ORDER BY 
    OA, CD
</cfquery>

下面是第一个转换为LINQ的查询,它工作得很好:

var Rows = allData.SelectMany(u => u._rows.Select(t => new
{          
  OA = t[4],
  CD = t[5],
  PDate = t[0]              
}))
.GroupBy(x => new { x.CD, x.OA, x.PDate  })
.Select(g => new
{
  g.Key.OA,
  g.Key.CD,
  g.Key.PDate 
})
.ToList();

下面是第二个LINQ查询的伪代码,我需要你的帮助:

var RowsDayCount  = Rows //Is this correct? If not, how to do it?
.GroupBy(x => new { x.OA, x.PDate, x.CD, })
.Select(g => new
{
  g.Key.OA,
  g.Key.CD,
  g.Key.PDate,//PDate should be PDate.Distinct().Count() asDayCount    
  // See DayCount in cfquery name="qDayCount" above.
})
.OrderBy(u => u.OA)
.ThenBy(u => u.CD) 
.ToList();

您的第二个查询最初不是在PDate上分组,但您的翻译是。这是错误的。如果您想为每个OA/CD对计算PDates的数量,则不需要在PDate上分组。一旦您完成了这个更改,您就可以修改Select以从组中取出所有的PDate值,并计算不同的值。

.GroupBy(x => new { x.OA, x.CD, })
.Select(g => new
{
    g.Key.OA,
    g.Key.CD,
    DayCount = g.Select(item => item.PDate).Distinct().Count(),
})

相关内容

  • 没有找到相关文章

最新更新