2012-04-24 31 views
6

Tôi có bảng khai báo 2 C#, cột này khởi tạo trong quá trình tạo chương trình.Tham gia loại ẩn danh trong LINQ

tôi muốn tham gia cơ sở bảng này trên UserID và UserName của bảng này.

Mã của tôi là như sau

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 

trong mã này tôi đang nhận được lỗi

không hợp lệ vô danh loại thành viên declarator. Các thành viên kiểu ẩn danh phải được khai báo bằng cách gán thành viên, tên đơn giản hoặc quyền truy cập thành viên.

Dù sao để tham gia loại ẩn danh?

Trả lời

13

Bạn cần phải xác định tên cho các thuộc tính loại vô danh:

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 

Lưu ý rằng tôi cũng đã thay đổi ở phía bên tay phải của kết nối để sử dụng SJL hơn nSJL quá, vì nếu không nó không hợp lệ. Nó sẽ giúp rõ ràng mã của bạn nếu bạn muốn sử dụng các tên có ý nghĩa hơn mặc dù ...

+0

@gdoron: Có, đã sửa :) –

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 

Bạn chưa khai báo tên trường cho loại ẩn danh của mình.

+0

Cảm ơn bạn Jakub –

Các vấn đề liên quan