我有一个复杂的实体CostPageDTO
,如下所示:
public class CostPageDTO
{
public string CostPageNumber { get; set; }
public string Description { get; set; }
public char OrderType { get; set; }
public string VendorName { get; set; }
public List<ItemDTO> Items { get; set; }
}
public class ItemDTO
{
public string BrandCode { get; set; }
public string ItemDescription { get; set; }
public string ItemID { get; set; }
}
我们需要从List<CostPageDTO>
创建datatable
。我开始如下所示:但我不知道如何在此处应用GROUP BY子句在CostPageDTO中创建List<ItemDTO>
。
DataTable table = new DataTable();
SqlDataReader reader = command.ExecuteReader();
table.Load(reader);
reader.Close();
List<CostPageDTO> costPages = new List<CostPageDTO>();
Parallel.ForEach(table.AsEnumerable(), (dr) =>
{
costPages.Add(new CostPageDTO()
{
CostPageNumber = dr[0].ToString(),
Description = dr[1].ToString(),
OrderType = Convert.ToChar(dr[2].ToString()),
VendorName = dr[3].ToString()
});
});
参考
答案 0 :(得分:1)
我假设您的数据库查询返回CostPage和Item之间的连接。 如果是这种情况,首先必须对行进行分组,以便在该项目之后获取CostPage的值到DTO类型。我真的怀疑你会在并行化代码方面看到很多好处。
您的代码应该大致如下:
costPages = table.AsEnumerable().GroupBy(dr=> new
{
CostPageNumber = dr[0].ToString(),
Description = dr[1].ToString(),
OrderType = Convert.ToChar(dr[2].ToString()),
VendorName = dr[3].ToString()
})
.Select(x => new CostPageDTO(){
CostPageNumber = x.Key.CostPageNumber,
Description = x.Key.Description,
OrderType = x.Key.OrderType,
VendorName = x.Key.VendorName,
Items = x.Select(dr=> new ItemDTO{
//ItemDTO mapping goes here
ItemID=dr[Constants.SearchPage.ITMID].ToString()
}).ToList()
}).ToList();