当天最后一项的计数

时间:2011-02-17 23:01:44

标签: asp.net linq

我有一个查询,其中一个字段包含状态计数。状态可以每天更改几次,计数应基于当天的最终状态。例如,这就是我对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 =......
    };

所以我需要计算日来匹配日期组的日期。

我正在努力解决这个问题,并且非常欢迎任何帮助。

感谢。

1 个答案:

答案 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差别不大。