2012-04-24 13 views
6

私は2 C#宣言テーブルを持っています、それはプログラムの作成中に列を初期化します。LINQの匿名タイプに参加する

私はUserIDとUserNameでこのテーブルベースを結合したかったのです。

マイコードは、私はエラーに

無効な匿名型のメンバ宣言子を取得しています。このコードで

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

あなたは匿名型のプロパティの名前を指定する必要があります。私は、あまりにもSJLではなくnSJLを使用するために参加の右側を変更した

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 

注意を、それ以外の場合は無効だとして。しかし、もっと意味のある名前を使用すると、コードの明快さに役立ちます。

+0

@gdoron:はい、既に修正済み:) –

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 –

関連する問題