使用linq填充类列表

时间:2012-11-20 16:33:08

标签: 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; 
}

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


class X
{
    Guid id;
    byte flag; 
}

我正在学习Linq。使用Linq从表中填充P类的任何解决方案都会有所帮助。

谢谢!

1 个答案:

答案 0 :(得分:2)

此查询将返回IEnumerable<P>(不确定将smallint转换为boolean,但其他内容应该有效)

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()
            };

评论:

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

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