【问题标题】:In linq to sql can I have a select (and groupby) within a groupby?在 linq to sql 中,我可以在 groupby 中选择(和 groupby)吗?
【发布时间】:2013-10-05 23:08:51
【问题描述】:

我有以下课程:

class XXX
{
    int XXXType{get;set;}
    List<YYY> Children{get;set;}
}
class YYY
{
    int YYYType{get;set;}
}

我想找到属性 XXXType 具有相同值的项目数,并且对于这些组中的每一个,我想找到其子项的属性 YYYType 具有相同值的项目数。 linq to sql 是否支持选择/组中的选择/组?我没有收到任何编译/运行时异常,但 YYYChildren 的长度始终为零。

(from x in XXX).GroupBy(x=>x.XXXType, (key, values) => new {
    XXXType = key,
    Count = values.Count(),
    YYYChildren = (from y in values.SelectMany(z=>z.Children).GroupBy(y=>y.YYYType, (key, values) =>
        new {
             YYYType = key,
             Count = values.Count()
        }
    });

【问题讨论】:

    标签: c# .net linq linq-to-sql


    【解决方案1】:

    这样的……

    //样本数据

       var xxxList = new List<XXX> {
                new XXX()
                {
                    XXXType = 1,
                    Children = new List<YYY>() {
                            new YYY() {YYYType = 1},
                            new YYY() {YYYType = 1},
                            new YYY() {YYYType = 2},
                            new YYY() {YYYType = 2}
                        }
                }
            };
    

    //查询:

            foreach(var x in xxxList.GroupBy(info => info.XXXType)
                        .Select(group => new { 
                             key = group.Key, 
                             Count = group.Count(),
                             YYYChildren = (from y in xxxList.SelectMany(z=>z.Children).GroupBy(y=>y.YYYType, (key, values) =>
                                            new {
                                                 YYYType = key,
                                                 Count = values.Count()
                                            }) select y.YYYType)
                        }))
            {
                 Console.WriteLine("XXXType :{0}, Number Of XXXTypes :{1}, Number Of YYYChildren :{2}", x.key, x.Count, x.YYYChildren.Count());
            }
    

    结果: XXXType:1,XXXType 数量:1,YYYChildren 数量:2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      相关资源
      最近更新 更多