如何解决具有潜在分组层的C#LINQ问题
我是linq的新手,所以任何建议都非常有帮助。假设我有一个类似的数据集
acct dim unit_code
10000 DIMENSION2 100
10000 DIMENSION2 1000
10000 DIMENSION2 1300
10000 DIMENSION2 1400
20000 DIMENSION2 1500
20000 DIMENSION2 200
20000 DIMENSION2 600
20000 DIMENSION2 700
20000 DIMENSION2 800
20000 DIMENSION2 900
10000 DIMENSION3 FGAC
10000 DIMENSION3 FGCP
10000 DIMENSION3 FGCV
10000 DIMENSION3 FGED
20000 DIMENSION3 FGES
20000 DIMENSION3 FGGM
20000 DIMENSION3 FGLD
20000 DIMENSION3 FGNB
20000 DIMENSION3 FGOR
20000 DIMENSION3 FGPM
10000 DIMENSION4 ENDO
20000 DIMENSION4 OTHR
20000 DIMENSION4 POTN
这是我的课程
public class RestrictionRule
{
public string acct { get; set; }
public List<dim> dims { get; set; }
}
public class dim
{
public string dim { get; set; }
public List<unit_code> unit_codes { get; set; }
}
public class unit_code
{
public string unit_code{ get; set; }
public string unit_code_description { get; set; }
}
我尝试返回RestrictionRule类,所以我开始编写类似的内容
var result = (from a in dataset
group a by new
{
a.acct,a.dim,} into b
select new RestrictionRule()
{
acct = b.Key.acct,dims = b.ToList(),});
在这一点上,我不确定为什么我对“ dims = b.ToList(),有异常(不能隐式地'system.collections.generic.list到system.collections.generic.list') / strong>”。另外,由于RestrictionRule类有两个列表(Dim和unit_code),在层次结构上,请建议我如何正确创建它。谢谢大家的事先帮助。
解决方法
您需要在每个级别分组以创建适当的类型:
var result = from d in dataset
group d by d.acct into acctGroup
select new RestrictionRule {
acct = acctGroup.Key,dims = (from d in acctGroup
group d by d.dim into dimGroup
select new Dim {
dim = dimGroup.Key,unit_codes = (from d in dimGroup
select new UnitCode {
unit_code = d.unit_code,// unit_code_description = ???
})
.ToList()
})
.ToList()
};
,
此LINQ查询不可翻译为SQL。 GROUP BY只能返回聚合结果和正在摸索的字段。考虑客户端评估,因为您需要客户端上的所有记录。
var result = from a in dataset.AsEnumerable()
group a by new
{
a.acct,a.dim,} into b
select new RestrictionRule()
{
acct = b.Key.acct,dims = b.ToList(),};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。