gpt4 book ai didi

c# - 如何将 sql 查询的结果映射到对象?

转载 作者:可可西里 更新时间:2023-11-01 07:54:30 25 4
gpt4 key购买 nike

目前,我正在使用这样的东西:

    try
{
dr = SQL.Execute(sql);

if(dr != null) {
while(dr.Read()) {
CustomObject c = new CustomObject();
c.Key = dr[0].ToString();
c.Value = dr[1].ToString();
c.Meta = dr[2].ToString();
customerInfo.CustomerList.Add(c);
}
}
else
{
customerInfo.ErrorDetails="No records found";
}

有没有办法直接进行此映射(假设列名与字段名匹配),而不是我手动进行分配。

然而,一个要求是我想通过我当前使用 sql 查询的方法而不是使用纯基于 LINQ 的方法来执行此操作。一方面,SQL 查询足够大,涉及复杂的 JOIN 并且已经过全面测试,所以我现在不想引入更多错误。有什么建议吗?

最佳答案

一个简单的解决方案是为您的 CustomObject 创建一个构造函数,它接受一个 DataRow(来自示例,所以如果它是另一个类,请纠正我)。

并且在您的新构造函数中,按照您在自己的示例中所做的操作。

public CustomObject(DataRow row)
{
Key = row[0].ToString();
// And so on...
}

另一种方法是引入泛型,并在您的 SQL 类中创建一个新函数

示例(从 Passing arguments to C# generic new() of templated type 获取代码):

// This function should reside in your SQL-class.
public IEnumerable<T> ExecuteObject<T>(string sql)
{
List<T> items = new List<T>();
var data = ExecuteDataTable(sql); // You probably need to build a ExecuteDataTable for your SQL-class.
foreach(var row in data.Rows)
{
T item = (T)Activator.CreateInstance(typeof(T), row);
items.Add(item);
}
return items;
}

示例用法:

public IEnumerable<CustomObject> GetCustomObjects()
{
return SQL.ExecuteObject<CustomObject>("SELECT * FROM CustomObject");
}

我已经在 LinqPad 中测试了这段代码,它应该可以工作。

关于c# - 如何将 sql 查询的结果映射到对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11270999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com