0

我在构建我的 linq 查询时遇到问题,我需要你的帮助,以下代码是我到目前为止所得到的,它确实有一些预期的错误,所以,这是我的 sql 查询:

*我是 linq 的新手,并通过谷歌搜索过。

select CAST(h.changedate as date) as 'RegDate' ,count (cast(h.changedate as date)) as 'Amount' from T_TalmidStatusHistory h
    join T_talmid t on h.talmidid = t.talmidid 
    where t.talmidStatusID=16 and h.[statusid] != 16
        and h.id =
            (
                select max(id) from T_TalmidStatusHistory 
                    where T_TalmidStatusHistory.talmidid=h.talmidid  and T_TalmidStatusHistory.[statusid] != 16
            )
    group by CAST(h.changedate as date)

这就是我现在在 linq 中所拥有的:

    var res = from r in db.T_TalmidStatusHistories
              from m in db.T_TalmidStatusHistories
   join t in db.T_Talmids  on r.TalmidID equals t.TalmidID
   where  t.TalmidStatusID == 16 && r.StatusID != 16
    && r.id == from l in db.T_TalmidStatusHistories
        where m.TalmidID  == r.TalmidID && m.StatusID != 16
        select new{db.T_TalmidStatusHistories.OrderByDescending(tp => tp.id).FirstOrDefault().id }
        group h by h.changedate as date
   select new { h.changedate as date, count (cast(h.changedate as date))};

编辑:我希望得到每个日期注册的学生人数,

我的错误是:运算符'=='不能应用于'int'和'System.Linq.IQueryable'类型的操作数在行:r.id == from l in db.T_TalmidStatusHistories

泰。

4

1 回答 1

0

整个部分

from l in db.T_TalmidStatusHistories ... count (cast(h.changedate as date))}

是一个r.id==操作员比较的查询。

将其更改为

...
r.id == (db.T_TalmidStatusHistories
        .Where(m.TalmidID  == r.TalmidID && m.StatusID != 16)
        .OrderByDescending(tp => tp.id).FirstOrDefault().id)
group h by h.changedate as date
select new { h.changedate as date, count (cast(h.changedate as date))};
于 2012-10-28T13:49:50.437 回答