将数据读取器中的行转换为类型化结果

2023-12-12

我正在使用返回数据读取器的第三方库。我想要一种简单且尽可能通用的方法将其转换为对象列表。
例如,假设我有一个类“Employee”,它有 2 个属性 EmployeeId 和 Name,我希望将数据读取器(其中包含员工列表)转换为 List
我想我别无选择,只能迭代数据读取器的行,并将它们中的每一行转换为我将添加到列表中的 Employee 对象。有更好的解决办法吗?我使用的是 C# 3.5,理想情况下我希望它尽可能通用,以便它可以与任何类一起使用(DataReader 中的字段名称与各个对象的属性名称相匹配)。


您真的需要一个列表吗?或者 IEnumerable 就足够了吗?

我知道您希望它是通用的,但更常见的模式是在接受数据行(或 IDataRecord)的目标对象类型上有一个静态工厂方法。那看起来像这样:

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }

    public static Employee Create(IDataRecord record)
    {
        return new Employee
        {
           Id = record["id"],
           Name = record["name"]
        };
    }
}

.

public IEnumerable<Employee> GetEmployees()
{
    using (var reader = YourLibraryFunction())
    {
       while (reader.Read())
       {
           yield return Employee.Create(reader);
       }
    }
}

那么如果你really需要一个列表而不是一个可以调用的 IEnumerable.ToList()关于结果。我想您还可以使用泛型+委托来使该模式的代码更可重用。

Update:今天又看到这个,有种想写下遗传密码的感觉:

public IEnumerable<T> GetData<T>(IDataReader reader, Func<IDataRecord, T> BuildObject)
{
    try
    {
        while (reader.Read())
        {
            yield return BuildObject(reader);
        }
    }
    finally
    {
         reader.Dispose();
    }
}

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

将数据读取器中的行转换为类型化结果 的相关文章

  • 如何向WebRequest添加参数?

    我需要从 Web 服务调用一个方法 所以我编写了以下代码 private string urlPath http xxx xxx xxx manager string request urlPath index php org get or
  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • 应用新设置时如何防止 GraphicsDevice 被丢弃?

    我的游戏窗口允许手动调整大小 这意味着它可以像任何其他普通窗口一样通过拖动其边缘来调整大小 游戏还利用了RenderTarget2D rt2d 在主 Draw 方法中设置主渲染目标 GraphicsDevice SetRenderTarge
  • 主构造函数不再在 VS2015 中编译

    直到今天 我可以使用主构造函数 例如 public class Test string text private string mText text 为了能够做到这一点 在以前的 Visual Studio CTP 中 我必须将其添加到 c
  • C# 反序列化过程中创建指向父对象的指针

    我有这样的课程 Serializable public class child public Parent parent Serializable public class Parent public List
  • 文件加密与解密问题

    我一直在尝试在 VC Express 2010 中加密和解密文件 我见过的所有教程和文档都需要两个FileStreams 来加密文件 一个用于读取未加密的版本 另一个用于加密 当我实际编写代码时 它不断抛出错误 告诉我它无法打开该文件 因为
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 删除数组时出现访问冲突异常

    删除分配的内存时 出现 访问冲突读取位置 异常 如下所示 我有一个针对 Visual Studio 2010 工具集 v100 C 编译器编译的本机 dll 我有一个针对它的托管 dll 包装器 它是针对工具集 v90 编译的 因为我想以
  • 模板定义中的友元函数

    我的问题有点相关this https stackoverflow com questions 1297609 overloading friend operator for template class one 我想重载某些类的运算符 te
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • C# 和断点 - 这里有魔术师吗?

    我有这个 public static void ByLinkText string text for var i 0 i lt 50 i try Setup Driver FindElement By LinkText text Click
  • boost::spirit::qi::语法和可变参数模板

    我在使用可变参数模板定义语法时面临一个问题 我首先定义一些包含在某些结构中的简单语法 例如纬度 经度 如下所示 include

随机推荐

  • 为什么 ng-href 在解析地理字符串时表现奇怪

    我有多个地理字符串 例如geo 0 0q 1 a bc 我将把它分配给ng href的锚标记 就像下面我正在做的那样 HTML a Location a 上面的标签在 HTML 上渲染得很好 但是添加了unsafe string geo 0
  • 在 bash 中将条件参数传递给curl

    我有一个调用curl的bash脚本 并且只有在满足某些条件时我才想传递某个参数 result curl sS retry 3 retry delay 10 some more stuff b b echo F foo bar https w
  • 通过单击 JavaScript 中的注入元素启动将字符串复制到剪贴板

    进一步回答这个问题 在 Chrome 中使用 jQuery js 复制到剪贴板 上述问题中的代码非常适合使用 JavaScript 将字符串复制到剪贴板 但我需要通过用户单击注入的元素来触发该过程 由于某种原因 如果注入元素 代码将无法工作
  • 使用 UDF 从 PySpark Dataframe 解析 XML 列

    我有一个场景 数据框列中有 XML 数据 county created at first name id meta name count position sex sid updated at visitors year
  • PHP 5.3.8 中的filter_var

    我正在开发用户注册表单并希望验证用户的电子邮件地址 然而 我读过的所有 php 文档都建议使用 filter var 我的脚本将有效电子邮件验证为无效 请发布一个工作脚本或者指导我完成我的脚本 她的是我的剧本
  • 如何使用 XMLHTTPRequest 传递变量

    如何将变量发送到服务器XMLHTTPRequest 我可以将它们添加到 URL 的末尾吗GET请求 比如 variable1 variable2 etc 所以或多或少 XMLHttpRequest GET blahblah psp vari
  • PHP 对某些索引相同的多维数组值求和

    这里只是一个简单的问题 我有以下数组 Array 21 0 gt Array 7 punti gt Integer 418 vittorie gt Integer 9 podi gt Integer 18 gv gt Integer 14
  • if 条件子句中的函数

    我被赋予了这个函数来预测输出 它说引用错误 我仍然想知道为什么 if function x console log ABC x 希望有人能够对词法范围有所启发 提前致谢 你所拥有的是一个函数表达式 即使一个named一 并且您没有将该表达式
  • 如何使元素的角成为斜角?

    我希望元素的角基本上被切断 该元素具有纯色背景 而其父元素则具有图像作为背景 该元素的高度未知 CSS 的 border radius 属性对我没有帮助 因为它会四舍五入 我发现一个 jQuery 插件这有帮助 但它不考虑背景图像 你想要的
  • 在 Android 上 Smack,通过本地 Openfire 服务器在两个用户之间发送数据包/消息时收到错误代码 =“404”remote-server-not-found

    我很高兴通过本地 Openfire 服务器在 Android 上实现 smack 它连接到 Gmail 服务器主机 并且工作起来非常有魅力 教程找到了here 但是当我尝试通过安装了本地 Openfire 服务器的 Android 模拟器连
  • JSP 中的 fsockopen 等效项

    我该如何将这段代码转换为 JSP 任何帮助表示赞赏 fp fsockopen www example com 80 errno errstr 30 if fp echo errstr errno br n else out GET HTTP
  • iPhone - 如何对称滚动两个 UITableViews

    在我的应用程序中 我有两个并排的 tableView 当用户滚动时 我希望第二个同时滚动 因此它看起来几乎就像一个具有两个不同列的表 我对如何去做这件事有点迷失 有什么建议吗 谢谢 格雷格 方便的是 UITableView 是 UIScro
  • iPhone设备上的相册路径是什么?

    我试图将 PNG 文件保存到 iPhone 设备上的相册文件夹中 扩展名为 png 以便保持透明度 我的问题是 UIImageWriteToSavedPhotosAlbum 函数使用的相册路径是什么 我正在使用数据写入文件方法 Thanks
  • Django 国家下拉菜单默认值

    我正在使用 Django ModelForms 我有一个下拉选择器 允许用户选择国家 地区 该国家 地区是预订模型的一部分 并使用 django countries 定义 例如 在 models py 中 from django count
  • 批处理脚本 - 如何使用存储了变量名称的不同变量来获取变量值

    我无法访问下面示例中存储的值 我需要访问存储在变量中的值 但变量名称存储在不同的变量中 请帮忙 Example setlocal enabledelayedexpansion set a222333password hellopass fo
  • GitHub 网络图表示合并后错误的第一个父级

    我发现 GitHub 网络图和 git 日志之间存在差异 比较网络图我的 GitHub 存储库名为niagara 的输出git log graph all oneline decorate 13d9ccc origin dev dev ed
  • 如何以 smt2 格式示例获取 z3 求解器的多个解决方案?

    如何使用 smt2 格式的 z3 求解器生成位向量公式的多个模型 在为位向量实现 IDEA 代码时 它正在生成一个模型 如果存在 如何生成相同的所有可能模型 ex smt2 file set logic QF BV set info smt
  • 如何为UWP包安装程序添加Microsoft.NET.CoreRuntime.2.1?

    我有 Xamarin 应用程序 我可以构建 ipa APK 和 UWP appx 包 ipa 和 APK 工作正常 我在安装 UWP 时遇到问题 UWP 问题 要求安装Microsoft NET CoreRuntime 2 1因为它是依赖项
  • 如何检测 NSOutlineView 的滚动?

    我有两个并排显示的 NSOutlineView 它们包含相同数量的行 这是先决条件 并且当用户使用鼠标 键盘或滚动条滚动时我需要同步它们 以便我看到相同的视图部分 或行 我是可可土地上的新手 我无法找到如何实现这一点 您需要获取 NSOut
  • 将数据读取器中的行转换为类型化结果

    我正在使用返回数据读取器的第三方库 我想要一种简单且尽可能通用的方法将其转换为对象列表 例如 假设我有一个类 Employee 它有 2 个属性 EmployeeId 和 Name 我希望将数据读取器 其中包含员工列表 转换为 List 我