2011-12-18 9 views
0

Hihiすべて、数時間にわたりグーグルで検索した後、まだ私のlinqステートメントで立ち往生しています。複数の結合を持つLinQ、where句との結合、グループby

私は3つのテーブルがあります。tbMessageで

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

をRequestIDが

tblRequestにRequestIDの外部キーである私のシナリオでは、私は特定のユーザーのためのtblRequestからのすべての要求を取得する必要があり、ということです、未読メッセージの数が表示されます。

選択したフィールドは、事前にtblRequest.RequestID、tblRequest.RequsetDate、tblUser.Username、COUNTOfUnreadMessage(Isread == false)を

感謝する必要があります!

について

答えて

1

に役立ちます願っています。

1

私はあなたに解決策があると思います。 dbはlinqデータベースのコンテキストです。

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を持つローカル変数である:これはDBContext関係を使用して

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() 
関連する問題