我使用 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。 而不是在数据表行中循环。
答案 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;
}
}
}