2012-04-24 162 views
6

我確實有2個c#聲明表,它在創建程序的過程中對它進行了列初始化。在LINQ中加入匿名類型

我想加入此表的基礎上其用戶名和用戶名。

我的代碼是想在這個代碼以下

from nSJL in UserList.AsEnumerable() 
join SJL in UserListOnline.AsEnumerable() 
on 
new { nSJL.Field<int>("UserID"), nSJL.Field<string>("UserName") } 
equals 
new { nSJL.Field<int>("UserID"), nSJL.Field<string>("UserName") } 
into sjList 

我正在錯誤

無效的匿名類型成員聲明。匿名類型成員必須聲明爲成員分配,簡單名稱或成員訪問權限。

無論如何加入匿名類型?

回答

13

您需要爲匿名類型的屬性指定名稱:

from nSJL in UserList.AsEnumerable() 
join SJL in UserListOnline.AsEnumerable() 
on 
new { UserID = nSJL.Field<int>("UserID"), 
     UserName = nSJL.Field<string>("UserName") } 
equals 
new { UserId = SJL.Field<int>("UserID"), 
     UserName = SJL.Field<string>("UserName") } 
into sjList 

請注意,我也改變了加入右側使用SJL而非nSJL太多,否則它是無效的。這將有助於你的代碼的清晰度,如果你使用更有意義的名字,雖然...

+0

@gdoron:是的,已經修復:) – 2012-04-24 08:10:56

5
from nSJL in UserList.AsEnumerable() 
join SJL in UserListOnline.AsEnumerable() 
on 
new{ UserID = nSJL.Field<int>("UserID"), UserName = nSJL.Field<string>("UserName") } 
equals 
new { UserID = nSJL.Field<int>("UserID"), UserName = nSJL.Field<string>("UserName") } into sjList 

您沒有爲您的匿名類型聲明字段名稱。

+0

謝謝Jakub – 2012-04-24 10:39:04