2017-05-08 7 views
1

私はC#のリストが良くないです。なぜなら、それは私にとって非常に混乱しているからです。だから今、私はこのようになりますどの互いの中に2つのテーブルを参加しました:C#list join declaration

var final = queryTable 
    .Join(skillTable, 
     query => query.Id_Skill, 
     skill => skill.Id, 
     (query, skill) => new { Id = query.Id, Name = query.Name, Line1 = skill.Line1, Line2 = skill.Line2, Line3 = skill.Line3, Line4 = skill.Line4, Line5 = skill.Line5 }) 
    .ToList(); 

新しいリストHAST要素IdNameLine1Line2Line3Line4Line5を見ることができるように。

このリストのタイプは何ですか? どういう意味ですか、varの代わりにリストを宣言するのですか?私はさらなる目的のためにこれが必要です。

同様:

List<theType> final = new List<theType>(); 
final = ... 
+3

になってしまいます –

+3

それはちょうど[匿名型](https://docs.microsoft.com/を作成しますen-us/dotnet/articles/csharp/programming-guide/classes-and-structs/anonymous-types)を参照してください。あなたがそれを後で参照する必要があるなら、ええ、Louis-Rochが言ったこと。 –

+0

投稿に投票のアドバイスを提供しないでください。ちょうどボランティア編集者のための作業が作成されます - ありがとう! – halfer

答えて

3

あなたがこれを参照する必要がある場合は、後であなたがこの

public class SomeName 
{ 
    int id { get; set; } 
    string Name { get; set; } 
    string Line1 { get; set; } 
    string Line2 { get; set; } 
    string Line3 { get; set; } 
    string Line4 { get; set; } 
} 

のようにすべてのこれらのプロパティを持つクラスを作成してから、

var final = queryTable 
.Join(skillTable, 
    query => query.Id_Skill, 
    skill => skill.Id, 
    (query, skill) => new SomeName() { Id = query.Id, Name = query.Name, Line1 = skill.Line1, Line2 = skill.Line2, Line3 = skill.Line3, Line4 = skill.Line4, Line5 = skill.Line5 }) 
.ToList(); 
+0

'新しいSomeName()'?空のオブジェクトのリストはそれほど役に立ちません。 – crashmstr

+0

@crashmstrええはそれを追加するのを忘れたがSamichは –

+1

あなたがプロパティに値を割り当てたり、パラメータ化コンストラクタに – Samich

0

あなたはnew { }構文を使用して匿名タイプを作成しています。つまり、特に同じフィールドを持つクラスを作成しない限り、varしか使用できません。

2

このクラスの新しいインスタンスを作成するためにあなたのクエリを変更することができますanonymous typesのドキュメント:(強調が追加されました)

通常、匿名型を使用して変数を初期化するときは、varを使用して変数を暗黙的に型指定されたローカル変数として宣言します。 コンパイラのみが匿名型の基礎となる名前にアクセスできるため、変数名の宣言で型名を指定することはできません。 varの詳細については、Implicitly Typed Local Variablesを参照してください。

クエリが実行された後に型を再利用する場合は、おそらくその目的のためのクラスを作成することをお勧めします。

別の解決策は、Tupleを使用することです。これは、別のクラスを作成するのを防ぎますが、あまりにも多くの場所で型を参照する予定がある場合には、苦労します。同じメソッド内でデータをさらに操作する予定がある場合にのみ、おそらくTupleを使用します。

(query, skill) => Tuple.Create(query.Id, query.Name, skill.Line1, skill.Line2, 
           skill.Line3, skill.Line4, skill.Line5 }); 

あなたはすべてのこれらのプロパティを持つクラスを作成しようとすることができList<Tuple<int, string, .... >