mysql表进入List

时间:2011-12-21 11:50:16

标签: c# mysql winforms

我使用 c# winform mysql 数据库。
我有一个 t_class 表格,如下所示

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

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

你能告诉我吗,
如何将t_table中的数据加载到此列表中。

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

LINQ to SQL是理想的选择,但是因为你有MySQL所以在这种情况下你不会有开箱即用的支持。虽然您可以浏览Linq Provider for MySql

其他选项可能是使用DataTable从数据库中检索SQL Query。然后迭代检索到的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);
        }

答案 2 :(得分: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;
            }
        }
    }