2009-05-21 55 views
2

使用類RoleRecord(Guid RoleId,字符串RoleName,...)我正在嘗試獲取名稱的新列表,其中RoleId與Guid列表匹配Linq將IEnumerable(Of Struct)連接到IEnumerable(的對象)

IEnumerable<RoleRecord> roles; 
IEnumerable<Guid> roleIds; 

我在想避免嵌套的循環和沿線:

  var query = 
      from rowA in roles 
      join rowB in roleIds 
      on rowA.RoleId equals rowB.???? 
      select { rowA.RoleName }; 

我試着來包裝一類的GUID太多,但甚至不能建立,因爲語法錯誤。 任何想法? 感謝

回答

3

試試這個:

var query = 
      from rowA in roles 
      where roleIds.Contains(rowA.RoleId) 
      select rowA.RoleName; 
+0

工作正常,謝謝 – CRice 2009-05-22 00:39:13

5

我會親自使用傑里米的答案,如果你已經有了的GUID的顯著數量。如果連接是你真正想要的表達 - 你只需要:

var query = from rowA in roles 
      join rowB in roleIds on rowA.RoleId equals rowB 
      select rowA.RoleName; 

或者,先創建一組角色ID:

HashSet<Guid> validRoleIds = new HashSet<Guid>(roleIds); 
var query = from rowA in roles 
      where validRoleIds.Contains(rowA.RoleId) 
      select rowA.RoleName; 

的優點是,那麼你並不需要通過每個角色的每個有效角色ID進行線性搜索。如果您知道知道您沒有多個角色或角色ID,但這通常不是問題,但通常散列方法會更有效。

請注意,連接也將在內部使用散列。

+0

感謝您的回覆。我對linq很新,但喜歡它越來越多。 – CRice 2009-05-22 11:54:17

相關問題