2012-04-24 121 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