c#将一个到多个对象的查询映射到复杂类型

本文关键字:查询 映射 复杂 类型 对象 一个 | 更新日期: 2023-09-27 18:18:32

我有一个自定义类型的列表,我想将这个自定义类型映射到另一个复杂类型,以表示一对多关系。

ViewModel类包含如下数据:

id name address
1   a    add1
1   b    add2
1   c    add3
2   aa   aaAdd
2   cc   ccAdd
3   aaa  aaaAdd
我代码:

public class A  //class to map 
{
    public int? Id { get; set; }
    public List<B> Data { get; set; }
}
public class B
{
    public string Name { get; set; }
    public string Address { get; set; }
}
var data= context.Database.SqlQuery<ViewModel>(query).ToList();
// query to get data, I want to map this ViewModel to List<A> class.

我可以按顺序来做,但我想要另一个解决方案。

我可以这样得到A课的结果吗?

[
    {id='1',[{a,add1},{b,add2},{c,add3}]},
    {id='2',[{aa,aadd1},{cc,ccdd2}]},
    {id='3',[{aaa,aaadd}]}
]

c#将一个到多个对象的查询映射到复杂类型

可以使用 GroupBy ,然后使用 Select 构造B的列表。

var data = context.Database.SqlQuery<ViewModel>(query)
    .ToList() // Execute the query first
    .GroupBy(q => q.Id)
    .Select(g => new A
    {
        Id = g.Key,
        Data = g.Select(b => new B { Name = b.Name, Address = b.Address }).ToList()
    })
    .ToList();