我有一张类似于下面的表格:
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类的任何解决方案都会有所帮助。
谢谢!
答案 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)