使用C#Dapper将每个对象与列表或集合进行多重映射

时间:2018-11-26 16:14:42

标签: c# visual-studio dapper multi-mapping

我无法将数据库的结果多重映射到我的对象。我想将生产对象映射到将它们保存到每个工作站的列表。

Table1:
productProduction     Workstation
-----------------     -----------
es1                   cell_1
es2                   cell_1
es4                   cell_3
est3                  cell_4

table2 workstations:
Workstation   
----
cell_1
cell_2
cell_3
cell_4


public class Workstation {
   public string Cell { get; set; }
   public List<Production> {get; set;}
}

public class Production {
   public string product_name { get; set; }
}

1 个答案:

答案 0 :(得分:0)

如果您具有上述数据结构,则就像从product获取数据并按group by运行一样简单。这是一个单一的数据库调用解决方案。

(IDbConnection) conn.Query("SELECT Production, Workstation FROM product").AsList()
        .GroupBy(o -> o.Cell)
        .Select(g-> new Workstation {
          Cell = g.Key,
          Productions = g.Select(x=>new Production { product_name = x.Production }).ToList()
        })
        .ToList();

如果workstations包含其他数据,请在执行上述操作之前

        class WorkstationRow { ... /* columns of workstation table */ };

        var workstationDict = conn.Query<WorkstationRow>("SELECT * FROM workstations").AsList().
        .ToDictionary(row -> row.Workstation, row -> row);

然后可以在最终构造中使用它。