具有以下表格结构
我需要按状态转录的计数,其中记录没有工作流文件夹。这就是诀窍:
from p in Transcriptions
where p.WorkflowfolderID == null
group p by p.TranscriptionStatus.Description into grouped
select new
{
xp=grouped.Key,
xp1= grouped.Count(),
}
现在我需要添加Dueon日期过去的记录数量,因为它已超过截止日期。等等
EntityFunctions.DiffHours(p.DueOn,DateTime.Today)>0
如何在不触发2个SQL查询的情况下将其包含在结果集中?我很高兴将它作为第三列,在每一行中具有相同的值。无论如何还要将百分比纳入混合中,如:
状态|数| %|
------------------------------
Status1 | 20 | 20%
Status2 | 30 | 30%
Status3 | 30 | 30%
逾期| 20 | 20%
我已将Overdue添加为一行,但非常乐意将其作为具有相同值的列。
已修改内容
这是我能想到的最好的。它不是一个单一的查询,但只有一次SQL旅行。结果是:
状态|伯爵
----------------
Status1 | 20
Status2 | 30
Status3 | 30个
逾期| 20
var q1= from p in Transcriptions
where p.WorkflowfolderID == null
group p by p.TranscriptionStatus.Description into grouped
select new
{
status= (string)grouped.Key,
count= grouped.Count()
};
var q2 =(
from p in Transcriptions select new {status = "Overdue",
count = (from x in Transcriptions
where x.DueOn.Value < DateTime.Now.AddHours(-24)
group x by x.TranscriptionID into
grouped select 1).Count() }).Distinct();
q1.Union(q2)
这是一个Union子句,一旦返回结果就会进行%计算。奇怪的是,我无法弄清楚在LINQ语句中表示以下SQL的任何干净方式,这导致了var q2中相当混乱的LINQ。
SELECT COUNT(*) , 'test' FROM [Transcription]
答案 0 :(得分:0)
您可以向Count
添加条件:
from p in Transcriptions
where p.WorkflowfolderID == null
group p by p.TranscriptionStatus.Description into grouped
select new
{
xp=grouped.Key,
xp1= grouped.Count(),
xp2= grouped
.Count(p => EntityFunctions.DiffHours(p.DueOn, DateTime.Today) > 0)
}
顺便说一句,使用实体框架,您也可以使用p.DueOn < DateTime.Today
。
答案 1 :(得分:0)
@Gert Arnold
from p in Transcriptions
where p.WorkflowfolderID == null
group p by p.TranscriptionStatus.Description into grouped
select new
{
status= (string)grouped.Key,
count= grouped.Count(),
overdue= grouped.Count(p => p.DueOn < EntityFunctions.AddHours(DateTime.Today, -24)),
}
上面的查询确实可以正常工作。它以
格式生成结果状态|数|逾期
----------------------
状态1 | 2 | 0
STATUS2 | 1 | 1
唯一的缺点是生成的SQL正在运行带有内连接的2个查询。我对联盟的最初想法可能是一个更好的想法表现明智,但你回答了我的疑问,为此我很感激。
此查询可以用比上述尝试更清洁的方式表示 -
SELECT COUNT(*) , 'test' FROM [Transcription]