2010-12-29 15 views
0

LINQを初めて使用しています。それは私のLinqの質問ですLINQ join in複数のfrom節なしの最良の方法

var users = from UserTbl in entity.User 
      from grpTbl in entity.Group 
      from role in entity.Role 
      where grpTbl.groupID == UserTbl.groupID&& UserTbl.userID==role.userID 
      select new Contract.User() 
      { 
       UserId = UserTbl.userID, 
       UserName = UserTbl.userName, 
       FirstName = UserTbl.firstName, 
       LastName = UserTbl.lastName, 
       GroupId = grpTbl.groupID, 
       GroupName =grpTbl.groupName, 
       DesignationID = role.roleID  
      }; 

どうすればこのクエリを最良の方法で書くことができますか?

+6

私にはうまく見えます – hunter

+0

あなたはこのクエリを実行しましたか? grpTbl.groupID == groupIdが完全ではないため、UserTblの参照も含める必要があります。 – ShahidAzim

+0

@ShahidAzim、おそらくそれらの2はクエリの外で宣言された参照です。ここではクエリのみが提供されています。私にもよく見えます。 – Jaymz

答えて

3

非常に上手です。私はjoinsを好むのは、where句から "一致する"式を削除することができるからです。そのため、「真の」フィルタリングだけが残ります。

var users = from UserTbl in entity.User 
      join grpTbl in entity.Group on grpTbl.groupID equals groupId    
      join role in entity.Role on UserTbl.userID equals role.userID 
      select new Contract.User() 
      { 
       UserId = UserTbl.userID, 
       UserName = UserTbl.userName, 
       FirstName = UserTbl.firstName, 
       LastName = UserTbl.lastName, 
       GroupId = grpTbl.groupID, 
       GroupName =grpTbl.groupName, 
       DesignationID = role.roleID  
      }; 
+0

ありがとうたくさん.. andrey – Hukam

+0

私は新しい行に 'on'句を置いていました。私のようにもっときれいに見えます。 –

関連する問題