C# 使用linq填充类列表

C# 使用linq填充类列表,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有一张类似于下面的表格: Data { id varchar(50), pId uniqueidentifier , fId uniqueidentifier , xid uniqueidentifier, flag smallint } 该表包含大量重复行,因为pId和fId是1:n关系,fId与xId也是1:n关系 我想查询此表并按如下方式填充obj: class P { Guid id; List<F> fList;

我有一张类似于下面的表格:

Data {
    id varchar(50),
    pId uniqueidentifier ,
    fId uniqueidentifier ,
    xid uniqueidentifier,
    flag smallint 
}
该表包含大量重复行,因为pId和fId是1:n关系,fId与xId也是1:n关系

我想查询此表并按如下方式填充obj:

class P
{
    Guid id;
    List<F> fList; 
}

class F
{
    Guid id;
    List<X> xList; 
}


class X
{
    Guid id;
    byte flag; 
}
P类
{
Guid id;
列表列表;
}
F类
{
Guid id;
列表列表;
}
X类
{
Guid id;
字节标志;
}
我在学林克。任何使用Linq从表中填充类P的解决方案都会有所帮助


谢谢

此查询将返回
IEnumerable
(不确定是否将
smallint
转换为
boolean
,但其他内容应该可以使用)

评论:

gp
将包含与某个pId对应的所有行,换句话说,它返回与pId相关的所有fId


gf
将包含先前结果中与某些fId相关的所有行(即与fId相关的所有XID)

您真的不应该问是或否的问题。你的问题的答案很简单,“是的”,我认为这对你没有帮助。还有,你试过什么?您在自己实施解决方案时遇到了哪些问题?谢谢!!正是我想要的。我将在时间限制后接受答案。@如果F也有标志,那么标志将重复多次,您不能确定所有标志值都相同,因此我将使用组合键分组。通过新的{f.fId,f.flag}将分组更改为这个
组f到gf
,并且在创建新的f对象时:
id=gf.Key.fId,flag=gf.Key.flag
var query = from p in context.Data
            group p by p.pId into gp
            select new P()
            {
                id = gp.Key,
                fList = (from f in gp
                         group f by f.fId into gf
                         select new F()
                         {
                             id = gf.Key,
                             xList = gf.Select(x => new X() { id = x.xid, 
                                                              flag = x.flag })
                                       .ToList()
                         }).ToList()
            };