我的数据采用表格格式,如
ID | Category | Group | Platform | Count
--------------------------------------------
1 | Accepted | Public | Windows | 20
1 | Completed | Debug | Mac | 15
等等。这些值的每个唯一组合将有一行(即,相同的ID可以有许多类别,并且Cateogories可以有许多组,并且组可以有许多平台等。
我有一个类,我想把它映射到我从一个只有一个字符串Platform和一个Count的类开始。然后有一个类有一个字符串Group和一个平台列表,然后是一个具有字符串Category和List of Group的类,依此类推。
我试图弄清楚如何将数据分组为可以在C#中解析为此类的格式。我目前正在这样做:
var data = falloffData.GroupBy(sk => new { sk.SID})
.Select(sg => new
{
SID = sg.Key.SID,
Group = sg.GroupBy(ak => new { ak.AGroup })
.Select(ag => new
{
AGroup = ag.Key.AGroup,
Category = ag.GroupBy(ck => new { ck.Category })
.Select(cg => new
{
Category = cg.Key.Category,
Platform = cg.GroupBy(pk => new { pk.Platform })
.Select(pg => new
{
Platform = pg.Key.Platform,
Count = pg.Sum(c => c.TotalCount)
})
})
})
});
这组合正确,但我最终得到的IEnumerable有很多匿名类型,如:
{AGroup =“Production”,Category = {System.Linq.Enumerable.WhereSelectEnumerableIteratorf__AnonymousType4, Scratch.Program.FalloffItem>,<> f__AnonymousType5f__AnonymousType7>>>}}
我不知道如何将其解析为我的C#类。
任何指针?
谢谢!
答案 0 :(得分:0)
你得到了很多匿名类型,因为你创建了很多匿名类型。
如果要选择/投影到具体类,则需要选择它们而不使用匿名类型。
鉴于您的课程
internal class SomePlatform
{
public string Platform { get; set; }
public int Count { get; set; }
}
internal class SomeCategory
{
public string Category { get; set; }
public IEnumerable<SomePlatform> Platforms { get; set; }
}
internal class SomeGroup
{
public string AGroup { get; set; }
public IEnumerable<SomeCategory> Categorys { get; set; }
}
internal class SomeClass
{
public string SID { get; set; }
public IEnumerable<SomeGroup> Groups { get; set; }
}
投影示例
blah.GroupBy(sk => sk.SID) // Group
.Select(sg => new SomeClass // Select into SomeClass
{
SID = sg.Key.SID,
Groups = sg.GroupBy(ak => ak.AGroup) // Group
.Select(ag => new SomeGroup // Select into SomeGroup
{
AGroup = ag.Key.AGroup,
Categorys = ag.GroupBy(ck => ck.Category) // Group
.Select(cg => new SomeCategory // Select into SomeCategory
{
Category = cg.Key.Category,
Platforms = cg.GroupBy(pk => pk.Platform) // Group
.Select(pg => new SomePlatform // Select into SomePlatform
{
Platform = pg.Key.Platform,
Count = pg.Sum(c => c.TotalCount)
})
})
})
});