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

时间:2014-03-18 14:01:00

标签: c# linq linq-to-objects

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

我转换了第一个查询,但对

没有任何线索
  1. 如何使用查询第二个查询

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

  3. 以下是使用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();
    

1 个答案:

答案 0 :(得分:1)

您的第二个查询原始未在PDate上进行分组,但您的翻译是。那是错的。如果您想计算每个PDates / OA对的CD个数,则无需对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(),
})