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