C#映射一对多对象查询到复杂类型

时间:2014-08-19 07:39:52

标签: c# entity-framework linq-to-sql

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

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.

我可以通过foreach做到,但我想要另一种解决方案。

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用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();