【问题标题】:Grouping data with Linq or not possible?用 Linq 分组数据还是不可能的?
【发布时间】:2009-02-12 14:47:31
【问题描述】:

我有一个具体对象的列表。有些需要分析以决定保留哪一个(当组包含超过 1 次出现时)。

这是一个简化的例子:

 List<MyObject> arrayObject = new List<MyObject>();
 arrayObject.Add(new MyObject { Id = 1, Name = "Test1", Category = "Cat1"});
 arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat2" });
 arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat3" });

这将只需要在分析结束时:

 arrayObject.Add(new MyObject { Id = 1, Name = "Test1", Category = "Cat1"});
 arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat3" });

正如您所见,带有 Cat2 的 Id2 已消失,因为业务逻辑将其删除。所以应该做的就是能够得到超过1个类别的人,并在上面应用一个逻辑。

这是我目前所拥有的:

        List<MyObject> arrayObject = new List<MyObject>();
        arrayObject.Add(new MyObject { Id = 1, Name = "Test1", Category = "Cat1"});
        arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat2" });
        arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat3" });


        var filtered = from arrayObject1 in arrayObject
                        group arrayObject by new { arrayObject1.Id, arrayObject1.Name }
                        into g
                        select new { KKey = g.Key, Obj = g };


        foreach(var c in filtered)
        {
            Console.WriteLine(c.KKey + ":" + c.Obj.Count());
            foreach (var cc in c.Obj)
            {
                //Put some Business Logic here to get only 1... but to simplify will just print
                Console.WriteLine("--->" + cc);
            }
        }

问题是 1) cc 不是 MyObject 类型,其次,我必须通过 new 获取组中的所有属性......我可能有几个不同的对象。 p>

Linq 可以吗?因为,我可以在不使用 Linq 的情况下做到这一点......但我正在尝试尽可能多地应用这个框架(3.5)的新东西。

【问题讨论】:

    标签: c# .net linq .net-3.5


    【解决方案1】:

    问题在于:

    group arrayObject by
    

    应该说:

    group arrayObject1 by
    

    【讨论】:

    • 天哪!不是它有效。您是否有一个想法,让我不必通过 new { arrayObject1.Id, arrayObject1.Name } 添加组 arrayObject1 中的所有字段。事实上,真实的对象有几个属性。没有办法按“除 x 之外的所有字段”分组吗?
    猜你喜欢
    • 2018-02-02
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多