LinQ有多个连接,左边连接where子句,group by

时间:2011-12-18 01:03:01

标签: linq group-by left-join where-clause

大家好,经过几个小时的谷歌搜索,仍然坚持我的linq声明。

我有3张桌子:

- tblRequest : RequestID, RequestDate, UserID
- tblUser: UserID, Username
- tbMessage: MessageID, RequestID, IsRead

tbMessage中的RequestID是tblRequest中的RequestID的外键

我的情况是,我需要从tblRequest获取针对特定用户的所有请求,以及未读消息的数量。

所选字段应为tblRequest.RequestID,tblRequest.RequsetDate,tblUser.Username,COUNTOfUnreadMessage(Isread == false)

提前致谢!

问候

2 个答案:

答案 0 :(得分:1)

我想我有一个解决方案。 db是linq数据库上下文。希望这有帮助

var userId=1;
    (
        from req in db.tblRequest
        join user in db.tblUser
            on req.UserID equals user.UserID
        where 
            req.UserID==userId
        select new
        {
            req.RequestID,
            req.RequestDate,
            user.Username,
            COUNTOfUnreadMessage= db.tbMessage.Where(a=>a.RequestID==req.RequestID && a.IsRead==false).Count()
        }
    ).ToList()

答案 1 :(得分:1)

使用DBContext关系:

from r in db.Requests
where r.UserID == _userID
select new
{
  r.RequestId,
  r.RequestDate,
  r.User.Username,
  UnreadMessagesCount = r.Messages.Where(m=>!m.IsRead).Count()
}

其中_userID是具有所需用户ID的本地变量。