2009-03-26 10 views
4

私はオブジェクトのLINQを取得しようとしていますが、そのオブジェクトのパワーを見ることができます。私はLINQが解決できなければならないと思う質問があります。LINQ - LINQが解決できるはずの例を使って把握してください!

ここに質問があります(詳細は例です)。あなたが例で見ることができるように

public class SchoolClass 
{ 
    public int ID; 
    public string Name; 
    public string Teacher; 
    public string RoomName; 

    public string Student_Name; 
    public int Student_Age; 
} 

は、1クラスの潜在的に多くの学生があり、すなわち、クラス名、教師やルームと学生の間で多くの関係にものがあります。

LINQを使用してリストを作成することは可能ですが、インスタンスID、名前、教師、RoomName、Student_NameとAgeのArrayListは1つしかありませんか?より多くの論理構造にリストをきれいにするLINQを使用して、基本的に

public class Students 
{ 
    public string Student_Name; 
    public int Student_Age; 
} 

public class SchoolClass 
{ 
    public int ID; 
    public string Name; 
    public string Teacher; 
    public string RoomName; 

    public ArrayList Students; 
} 

これを生産?

この例の背景を説明します。 2番目の構造体は、DataGridによってマスター - 子関係を生成するために使用されます。上記のように、SchoolClassとStudentInformationをクラスに格納します。初期リストをDataGridで使用できる構造に変換するには、LINQを使用するのがよいでしょう。

+0

あなたのクラスはパブリックフィールドを使用しています。本当のいいえ。プロパティisteadを使用してみてください。 "public string Teacher {get; set;}"さらに、学生のArrayListではなくList を使用することを検討してください。 – andleer

+0

なぜSchoolClassは1つのStudent_Nameの文字列フィールドを保持するのですか?これは例ですか?生徒クラスはすでに存在しますか?複数の学生がSchoolClassクラス階層にどのように格納されていますか? –

+0

@Andrew - agree –

答えて

6

私はList<Students>ArrayListを変え、そして:

List<SourceData> source = new List<SourceData>(); 
    //...your data here ;-p 
    var classes = (from row in source 
        group row by new { 
          row.ID, row.Name, 
          row.Teacher, row.RoomName } 
         into grp 
         select new SchoolClass 
         { 
          ID = grp.Key.ID, 
          Name = grp.Key.Name, 
          Teacher = grp.Key.Teacher, 
          RoomName = grp.Key.RoomName, 
          Students = new List<Students>(
           from row in grp 
           select new Students 
           { 
            Student_Age = row.Student_Age, 
            Student_Name = row.Student_Name 
           }) 
         }).ToList(); 
+0

私はこれを使用することができます.. – Fleming

+0

SchoolClassに、グループ化には必要ないが最終結果リストに存在する追加のプロパティがある場合はどうなりますか? TeacherFirstName、TeacherLastNameなど...いくつかのプロパティでグループ化すれば十分です。 – Fleming

+0

あなたはどちらを選ぶでしょうか(複数のヒットがあるかもしれません)。教師= grp.Select(x => x.Teacher).First() –

1

私はこれを正しく理解していた場合、私はSchoolClassクラスを実装するための最良の方法は、Studentクラスを作成するだろうと思ったでしょう(おそらく、 LINQツーSQLエンティティ、あなたがそれを使用している場合)とタイプの学生の一般的なリストを持っている、これに似た何か:

public class SchoolClass 
{  
    public int ID;  
    public string Name;  
    public string Teacher;  
    public string RoomName;  
    public List<Student> Students; 
} 

学生のリストは、その後、LINQクエリを使用して取り込むことができ私は正確にどのようにより多くの情報を。

希望ですが、これは助けになります。

+0

は、List にSchoolClassが50個含まれていると仮定できるだけで、すべてのStudent情報をsubListに入れるだけで、1つのSchoolClassがあるようにすることができますStudents 50用のArrayListがあります。 – Fleming

関連する問題