我正在尝试将ColdFusion中使用的查询转换为LINQ和c#。数据来自数据文件,而不是来自数据库。
我转换了第一个查询,但没有线索
-
如何使用查询第二个查询。
-
如何在第二个查询中包含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(),
})