gpt4 book ai didi

c# - 创建具有未知属性的对象列表

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:12 24 4
gpt4 key购买 nike

我正在考虑创建一个对象列表来存储来自数据库的行记录。但是,数据库的列可能是未知的,这意味着我不知道我的对象属性及其类型。关于我如何实现这一目标的任何想法。请找到下面的代码

public class TTSlogobj
{
public string Name { get; set; }
public int Id { get; set; }
public int Age { get; set; }
public string address { get; set; }

}

using (SqlDataReader newReader = command.ExecuteReader())
{
while (newReader.Read())
{

queryResult.Add(new TTSlogobj() {
Name = newReader["name"].ToString(),
Id = Convert.ToInt16(newReader["Id"]),
Age = Convert.ToInt16(newReader["Age"]),
address = newReader["address"].ToString(),

});
}


}

正如在代码中看到的那样,TTSlogobj 具有属性,它们是数据库中的列名,我如何在不知道数据库中的列及其类型的情况下编写 TTSlogobj。我已经阅读了 dapper 的文档,我意识到您仍然必须定义要将列从数据库映射到其对象的类属性。我实际上正在寻找一种工具,它可以像在 Entity Framework 中一样为您创建类属性。但比 Entity Framework 更简单的工具

最佳答案

您最好的选择可能是使用像 dapper 这样的工具已经做到了这一点:

var queryResult = connection.Query<TTSlogobj >(sql, args).AsList();

请注意,如果您已经有了命令代码,它还有建立在数据读取器之上的机制:

var rowReader = SqlMapper.GetRowParser<TTSlogobj>(newReader);
while(newReader.Read())
{
queryResult.Add(rowReader(newReader));
}

如果您想在没有库的情况下做到这一点,那么:反射。通常使用泛型,所以你会使用 typeof(T).GetProperties() 等。问题是反射相对慢,所以你会进入高级元-编程区域使性能与您手动编写代码时的性能相同,缓存区域使您可以自动重复使用您已经花时间创建的策略。这是 dapper 为您做的两件主要事情,这就是为什么使用库很有用。 Dapper 包含大量代码来帮助您执行查询——使参数化更容易等。

关于c# - 创建具有未知属性的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47099824/

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