如何将数据库中的行映射到对象列表中?
问题描述:
以下是对象和.txt文件的示例类,我使用filehelpers创建此类,然后使用FileHelpers读取.txt文件,并将此文件转换为这些对象,然后将它们放入List中。如何将数据库中的行映射到对象列表中?
.txt文件:
1122233
4455566
实施例类:
[FixedLengthRecord(FixedMode.AllowLessChars)]
public class Example
{
[FieldFixedLength(2)]
public string first;
[FieldFixedLength(3)]
public string second;
[FieldFixedLength(2)]
public string third;
}
与filehelpers读该给我Example.The第一Example.first值的2个对象是 '11' 等 我通过将List转换为DataTable并使用SqlBulkCopy将数据推送到数据库中。这一切顺利。
数据库中的表只包含3列(varchar)与列名;第一,第二和第三。
问题是当我尝试将数据从数据库中获取背部并将其映射回一个名单,我用下面的代码(使用小巧玲珑)本:
IDbConnection connection = new SqlConnection(connectionString);
var rows = connection.Query<Example>("select * from examplesTable");
foreach (Example e in rows)
{
examples.Add(e); //List<Example> examples
}
这将返回正确的金额的行,但是如果我尝试从对象中获取数据,它将包含空数据。我无法弄清楚我做错了什么。
答
不可能只写foreach (Example e in rows)
,你应该为Example创建构造函数,它将根据每行的数据创建一个Example对象。它看起来有点像
foreach (DaraRow r in rows)
{
Example e = new Examaple(r["First"],r["Second"]);
examples.Add(e); //List<Example> examples
}
+0
谢谢我会试试这个。 – RedZerg
“但是,如果我尝试从对象中获取数据” - 该代码的哪一部分引用? – Hughnited
@Hughnited我测试这与添加MessageBox.Show(e.First);到foreach循环,但它什么也没有显示(空窗口)。我也尝试将该列表转换为DataTable并将其推回数据库,结果是它推送了正确数量的行,但数据全为空。 – RedZerg
在foreach中:examples.Add(e); MessageBox.Show(e.First); //返回空白窗口。 – RedZerg