2011-12-21 27 views
1

我使用C#WinForm的的MySQL数据库
,我有一个表T_CLASS像下面MySQL表为表

id  class  group  name  surname 
1   10   1   joe   philips 
2   10   2   maya  edwards 
3   10   4   michael  collins 
4   11   3   sasha  ivanko 
5   10   2   araz  kurio 
etc... 

和我有一个类MyClass的这样

class MyClass 
{ 
    int class; 
    int group; 
    string name; 
    string surname; 
} 

有一个列表

List<MyClass> myclass = new List<MyClass>(); 

你能请告诉我,
我怎样才能从t_table加载数据到这个列表中。

我wolud喜欢在那里使用LINQ。 而不是在数据表行中为此循环。

+0

首先创建一个'constructor'来初始化数据值的值或属性。然后循环访问你从db中获取的'dataset table'并使用'myclass.add(new MyClass(Int32.Parse(dr [“class”])......));'在循环内部。它会填充你的列表与你的表格行对应的MyClass对象。 – 2011-12-21 11:55:19

回答

1

您应该必须使用Linq-Sql或实体数据模型。如果不是,那么你必须使用数据提供者类(DataAdapter)填充DataTable

添加公共属性或参数构造函数。

class MyClass 
{ 
    public int Class {get;set;} 
    public int Group {get;set;} 
    public string Name {get;set;} 
    public string SurName {get;set;} 
} 

var result = from row in dt.AsEnumerable() 
         select new MyClass 
         { 
         Class=row.Field<int>("class"), 
         Group=row.Field<int>("group"), 
         Name=row.Field<string>("name"), 
         SurName=row.Field<string>("surname") 
         }; 
1

LINQ to SQL将是理想的选择,但你有MySQL所以你不会有现成的支持该案件。虽然您可以探索Linq Provider for MySql

其他选项可能是使用SQL Query从数据库检索DataTable。然后,通过检索DataTable迭代并为每一行创建的MyClass新实例,并从DataTable

//pseudocode 
     List<MyClass> list = new ... 

     foreach(DataRow row in retrievedDataTable) 
     { 
      MyClass instance = new MyClass(); 
      instance.ID = row["ID"]; 
      similarly for rest of the properties 

      list.Add(instance); 
     } 
0

列值填充值,你也可以使用DataReader它

所以,你可以使用LINQ检索数据。

public static IEnumerable<T> GetEntity<T>() where T : new() 
    { 
     using (SqlDataReader reader ...) 
     { 
      while (reader.Read()) 
      { 
       T t = new T(); 

       var values = new object[reader.FieldCount]; 
       reader.GetValues(values); 

       for (var i = 0; i < values.Length; i++) 
       { 
        t.GetType().GetProperty(reader.GetName(i)).SetValue(t, values[i], null); 
       } 

       yield return t; 
      } 
     } 
    }