如何将 sql 查询的结果映射到对象上?

2024-02-18

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

    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 类中创建一个新函数

示例(代码来自将参数传递给模板类型的 C# 泛型 new() https://stackoverflow.com/questions/840261/passing-arguments-to-c-sharp-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 中测试了这段代码,它应该可以工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 sql 查询的结果映射到对象上? 的相关文章

  • Xamarin 测试记录器选项有错误。无法记录自动化测试

    选项 gt Xamarin gt Xamarin Test Recorder 中的所有设置都有错误 我的桌面上安装了 Visual Studio 2015 企业版 以及 Xamarin 和 Xamarin Test Recorder 插件
  • ptrace和waitpid有什么关系?

    我正在练习使用ptrace但我不太了解它和之间的关系waitpid 这是我的测试程序 int main int argc char argv pid t pid 22092 if ptrace PTRACE ATTACH pid NULL
  • Python 相当于 Bit Twiddling Hacks 中的 C 代码?

    我有一个位计数方法 我正在尝试尽可能快地实现 我想尝试下面的算法位摆弄黑客 http graphics stanford edu seander bithacks html CountBitsSetParallel 但我不知道 C 什么是
  • 为什么下面的重叠比较总是评估为 true

    我不明白为什么以下代码有警告 指出重叠比较始终评估为真 接下来的语句永远不会被执行 QVariant MainModel data const QModelIndex index int role const if index isVali
  • 在 T4 代码生成中,如何从引用的程序集中获取类型?

    由于 T4 在项目上下文之外运行 因此我无权访问当前程序集或其他程序集 如何注册对引用程序集的访问 然后从中获取类型 我猜您想访问项目中建筑物的程序集 我在下面的示例代码中所做的是将一个名为 TestLib 的项目添加到我的解决方案中 我将
  • 在关键服务器上对字符串进行内存受限的外部排序,并合并和计算重复项(数十亿个文件名)

    我们的服务器生成如下文件 c521c143 2a23 42ef 89d1 557915e2323a sign xml在其日志文件夹中 第一部分是GUID 第二部分是名称模板 我想计算具有同名模板的文件的数量 例如 我们有 c521c143
  • 使用外部硬盘写入和存储 mysql 数据库

    我已经设置了 mysql 数据库在我的 Mac 上使用 java 和 eclipse 运行 它运行得很好 但现在我将生成大约 43 亿行数据 这将占用大约 64GB 的数据 我存储了大量的密钥和加密值 我有一个 1TB 外部我想用作存储位置
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 代码块 - 使用大地址感知标志进行编译

    如何使用以下命令在 64 位系统上编译 32 位应用程序LARGE ADRESS AWARE使用代码块标记 我需要使用超过 2GB 的内存 应该是添加的情况 Wl large address aware到链接标志 我不使用 CodeBloc
  • 使用 ClosedXML 附加到 excel 文件

    我需要将新数据附加到使用 ClosedXML 创建的现有 Excel 文件中 如何使用 ClosedXML 附加到 Excel 文件 如何获取最后一条记录的行号并将其附加到该行号上 或者还有其他内容 Thanks 打开现有工作簿 然后使用L
  • 哪个更快?按引用传递与按值传递 C++

    我认为按引用传递应该比按值传递更快 因为计算机不复制数据 它只是指向数据的地址 但是 请考虑以下 C 代码 include
  • 多个包含带有变量定义的头文件

    我只是构建一个简单的 C 项目 代码如下所示 head h ifndef HEAD H define HEAD H int my var 100 endif src1 cpp include head h src2 cpp include
  • sqlite 插入需要很长时间

    我正在将不到 200 000 行插入到 sqlite 数据库表中 我只是在终端中通过 sqlite3 使用一个非常简单的 sql 文件 我打赌它已经运行了至少 30 分钟 这是正常现象还是我应该关闭该过程并尝试不同的方法 sqlite中的插
  • C# 从今天起 30 天

    我需要我的应用程序从今天起 30 天后过期 我会将当前日期存储在应用程序配置中 如何检查应用程序是否已过期 我不介意用户是否将时钟调回来并且应用程序可以正常工作 用户太愚蠢而不会这样做 if appmode Trial string dat
  • OpenSSL:无需 SSL_read() / SSL_write() 即可执行加密/解密

    我已经用 C 语言编写了一个基于事件的网络库 现在我想通过 OpenSSL 添加 SSL TLS 支持 而不是使用SSL read and SSL write 我宁愿让 OpenSSL 只执行传出 传入数据的加密 解密 让我自己传输 接收数
  • 智能感知不显示评论

    如果我在 Visual Studio 2010 中输入类似的内容数据集1 我得到所有可用方法和属性的列表 智能感知 这很好用 但是 如果我在此列表中选择一个方法或属性 我不会得到 if 的描述 例如 如果我有类似的东西 public cla
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • SQL Server CE 不兼容的数据库版本

    我有一个 SQL Server CE 4 0 数据库 sdf文件 当我尝试从我的应用程序 WPF 对数据库进行查询时 出现以下错误 数据库版本不兼容 如果这是兼容文件 请运行修复 其他情况请参考文档 数据库版本 4000000 请求的版本
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include

随机推荐

  • 出于计费目的,ndb 缓存的读取操作是否仍算作数据存储读取操作?

    From NDB 缓存 https cloud google com appengine docs standard python ndb cache NDB 为您管理缓存 有两个缓存级别 上下文缓存和 App Engine 标准缓存的网关
  • - 为什么它会这样工作?

    另一个新手 试图理解 Java 泛型 我发现我已经观察了所有主题 但我仍然有很多问题 您能否向我解释以下事项
  • Firefox SDK:如何为特定域创建触发器

    我需要捕获带有 URL 的网站上的请求 net并采取一些操作 停止请求并从磁盘中放入 HTML 代码 但这我可以做到 我如何捕获这些请求 我尝试使用进度侦听器 但出现了问题 const STATE START Ci nsIWebProgre
  • 使用 Google Endpoint 保存 blob

    我有一个应用程序 允许用户在 blobstore 中保存 blob 我目前有一个这样做的模式 但我对更简单 更少扭曲的东西感兴趣 对于上下文 假设我的应用程序允许用户上传动物的图片 并附上描述动物正在做什么的段落 呈现模式 用户调用我的端点
  • 部署时是否应该生成 *.pyc 文件?

    开发 Python Web 应用程序 Flask uWSGI 并在本地计算机上运行它时 pyc文件由解释器生成 我的理解是这些编译后的文件可以使东西load更快 但不一定run faster 当我将同一个应用程序部署到生产环境时 它在本地文
  • 哈希集不添加重复项,但为 Add() 返回 true

    编辑 更多信息 首先注意 新虚拟 该类继承了一个基类 该基类应该是一个通用的父级感知类 可以使用任何 ICollection 类型创建 这是描述符 基本上是 public abstract class ParentAwareCollecti
  • 在 Chrome 中获取扩展文件夹中的本地文件

    我知道我无法从扩展目录中获取本地文件 可以获得一个文件inside扩展目录本身 您可以使用chrome runtime getURL https developer chrome com docs extensions reference
  • 组合物品

    假设我有以下因素列表 factor 1 c A1 A2 A3 factor 2 c B1 B2 factor 3 c C1 C2 C3 C4 factor 4 c D1 D2 D3 我制作了以下数据框 其中包含这些因素的所有 3 2 4 3
  • mongodb聚合:如何返回带有最小值/最大值而不是值的对象

    假设我的文档有一个date字段 我想获取聚合中第一个和最后一个出现的文档 使用 group and min or max 很容易获得日期本身 例如 db mycollection aggregate group id 1 for the e
  • Android 应用程序中的 Facebook 和 Twitter 实时推送

    我想在我的 Android 应用程序中显示 Facebook 和 Twitter 的实时直播 就像这个页面一样 espn com http espn go com nba 怎么做 我应该在android中使用html css吗 Thanks
  • Nougat 上未调用 TelephonyManager 的 PhoneStateListener

    我制作了一个示例应用程序和 PhoneStateListener TelephonyManager telephony TelephonyManager getSystemService Context TELEPHONY SERVICE
  • ASP.Net Core 将数据从 SQL 数据库复制到 SQLite

    我正在将一个应用程序转换为 ASP Net Core 该应用程序要求用户能够在某些情况下离线工作 以前 我们通过将数据复制到 SQLite 数据库并将该数据下载到客户端来处理此问题 我在 ASP NET Core Entity Framew
  • php PDO使用占位符批量插入多行

    我希望使用 PHP PDO 进行多次插入 我找到的最接近的答案是这个 如何将数组插入到单个 mysql 准备好的语句中 https stackoverflow com questions 4629022 how to insert an a
  • 信号量 P 和 V 操作是原子操作吗?

    可以在信号量上执行的 P 和 V 操作是否保证原子操作 信号量可以防止两个进程进入 P 吗 假设我们有一个二进制信号量 s 其值为 1 并且两个进程同时尝试在 s 上执行 P 这些操作中只有一个能够在 s 上的下一个 V 操作之前完成 尝试
  • “故事板.故事板”无法打开

    无法打开文档 Storyboard storyboard 不能 阅读档案 请使用较新版本的 Xcode 考虑更改文档的 开发目标是保持兼容性 我们不能通过对设置进行一些更改来在 xcode 4 2 上运行它吗 打开storyboard文件作
  • 需要创建带有水印图像的光标[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要创建带有透明 水印 图像的光标
  • 如果 UILabel 的内容不适合,则更改文本末尾的默认“...”

    我的 iPhone 项目中有一个 UILabel 它具有固定的宽度和高度 但它的内容可能会根据用户正在查看的内容而变化 有时 文本对于 UILabel 来说太大 此时字符串 被添加到行尾 我想知道是否可以将此字符串更改为其他内容 例如 mo
  • 如何输入非富文本?

    是否可以进入non 富文本进入文本编辑器 撇号富文本编辑器似乎添加 p 标签围绕其中的所有内容 我想像这样格式化 widget html p h2 apos singleton data widget section heading apo
  • JDBC:Oracle 应用服务器和“网络适配器无法建立连接”错误

    我从 Oracle 应用服务器 10g 中部署的 Web 应用程序收到错误 网络适配器无法建立连接 数据库是本地的 因此不应该有任何连接问题 第一个测试 我可以从 SQL plus 连接到数据库 运行查询等 没有任何问题 第二次测试 我可以
  • 如何将 sql 查询的结果映射到对象上?

    目前 我正在使用这样的东西 try dr SQL Execute sql if dr null while dr Read CustomObject c new CustomObject c Key dr 0 ToString c Valu