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