我有一个查询,其中一个字段包含状态计数。状态可以每天更改几次,计数应基于当天的最终状态。例如,这就是我对Status1的看法。
CountStatus1 = (from status in MyDataContext.StatusHistory
where status.UserID == TheUserID
where status.StatusDateTime.Month == TheMonth.Month
where status.StatusDateTime.Year == TheMonth.Year
where status.NewStatus == 1 // where the LAST STATUS OF THE DAY == 1
select status.StatusID).Count()
问题是我想选择当天的最后状态等于1,并计算这些状态。一天的状态可以从1变为4到2到5到3,然后最终变为1;如果我写这样的查询,计数将包括2 1,然后4,2,5和3也将计入CountStatus4,CountStatus3,CountStatus“n”。
返回数据是按天分组的月度报告,其中每一天都是一行。
查询的结构如下所示:
var OutputStatusReport = from w in MyDataContext.WorkHistory
where w.UserID == TheUserID
where w.WorkDatetime.Month == TheMonth.Month
where w.WorkDatetime.Year == TheMonth.Year
group w by w.Datetime.Date into daygroups
select new MyObjectModel
{
CountStatus1 = ....,
CountStatus2 = ....,
CountStatus3 =......
};
所以我需要计算日来匹配日期组的日期。
我正在努力解决这个问题,并且非常欢迎任何帮助。
感谢。
答案 0 :(得分:1)
这是一个设定的操作问题,有几种方法可以做到这一点:
1)对于可能存在多个条件的每个实例,只选择值是您实际想要的条件
选择myDesiredInformation
来自表格
allMyOtherConditions和
MyMultipleCondition = MAX(选择多个条件的allCases)
2)将表格连接到自身,比较多个条件,并选择符合所需条件的表格
选择myDesiredInformation
from theTableWithMultipleConditions t1 left outer join theTableWithMultipleConditions t2
allMyOtherConditions和
t1.MagicValue> t2.MagicValue和t2.value为空
还有其他方法,但其中一种方法可能足以解决您所描述的问题。
var query = from status in MyDataContext.StatusHistory
where status.UserID == TheUserID
where status.StatusDateTime.Month == TheMonth.Month
where status.StatusDateTime.Year == TheMonth.Year
where status.NewStatus == 1
where status.StatusUpdateTime == (
from status in MyDataContext.StatusHistory
where (all those conditions above)
select status.StatusUpdateTime).Max()
select status.StatusID
这可以像#1一样实现它,你可以看到实现它就像#2差别不大。