c# - LINQ 将数据表映射到列表<MyObject>

标签 c# linq dto 3-tier

我刚刚发现 LINQ,所以请全面了解我! :-)

所以!我有一个为我提供数据表的数据层,我想将它们转换成对象列表。这些对象在特定层 DTO(数据传输对象)中定义。

如何将数据表的每一行映射到对象并将所有对象放入列表中? (今天我一个接一个地“手动”制作它) LINQ 有可能吗?我听说过 LINQ2Entities?我说得对吗?

感谢帮助初学者理解...

最佳答案

如果对象不是太复杂你可以使用这个:

public static class DataTableExtensions
{
   public static IList<T> ToList<T>(this DataTable table) where T : new()
   {
      IList<PropertyInfo> properties = typeof(T).GetProperties().ToList();
      IList<T> result = new List<T>();

      foreach (var row in table.Rows)
      {
         var item = CreateItemFromRow<T>((DataRow)row, properties);
         result.Add(item);
      }

      return result;
   }

   private static T CreateItemFromRow<T>(DataRow row, IList<PropertyInfo> properties) where T : new()
   {
       T item = new T();
       foreach (var property in properties)
       {
           property.SetValue(item, row[property.Name], null);
       }
       return item;
   }
}

有了这个,你现在可以写:var list = YourDataTable.ToList<YourEntityType>() .

您可以在这里阅读:http://blog.tomasjansson.com/convert-datatable-to-generic-list-extension/

这是对上一个问题的回答:Convert DataTable to Generic List in C#

编辑: 我应该补充一点,这不是 linq,而是对 DataTable 的一些扩展方法。我写。此外,它还遵循这样一种约定,即您要映射的对象中的属性与 DataTable 中的属性具有相同的名称。当然,这可以扩展为读取属性的属性,或者方法本身可以采用简单的 Dictionary<string,string>。可以用来做映射。您还可以使用一些需要 params string[] excludeProperties 的功能来扩展它可用于排除某些属性。

关于c# - LINQ 将数据表映射到列表<MyObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4192968/

相关文章:

architecture - DTO:同一资源的多个DTO(和汇编程序)

c# - 从 c# 代码运行 Android Activity (我将 Xamarin 与 Monogame 结合使用)

c# - ApplicationDbContext 不实现接口(interface)

c# - 如何根据集合的已知元素提取 IEnumerable 的一部分?

c# - 在 Entity Framework 中联合或连接自定义数据

json - 所有dtos都需要在rest调用中序列化吗

c# - 如何从控制台应用程序启动 kdiff?

c# - 远程mysql在循环中插入表非常慢

C# 检查基于文本的答案是否正确

collections - AutoMapper 和接口(interface)类型的集合