如何迭代Linq组结果集?

new*_*_86 5 c# linq ienumerable iterator

我从我的数据库中获取一些数据,并使用linq计算总和和计数并对数据进行分组.这就是我所拥有的:

        var si = _repository.GetAllByDate(date);

        var cs = from s in si
        group s by s.Name into g
        select new { Comm = g.Key, SIList = g.ToList(), Count = g.Count() };
Run Code Online (Sandbox Code Playgroud)

我现在需要将cs传递给另一个类中的方法,以便我可以为组中的每个项目提取Comm,SIList和Count,我将它传递给哪个类型?IEnumerable不起作用.实际的linq组结果类型似乎是:

{System.Linq.Enumerable.WhereSelectEnumerableIterator<System.Linq.IGrouping<Model.Domain.MasterData .MyItem,Model.Domain.SI<>f__AnonymousTyped<Model.Domain.MasterData.MyItem,System.Collections.Generic.List<Model.Domain.SI>,int>>}

有任何想法吗?我实际上想要将cs作为变量传递并在那里迭代它.

Yuc*_*uck 7

如果要在不同的范围内使用,则需要创建与匿名类型定义匹配的类型.

public class SomeClass {
    public Comm Comm { get; set; }
    public IList<String> SIList { get; set; }
    public Int32 Count { get; set; }
}

var si = _repository.GetAllByDate(date);

var cs = from s in si
         group s by s.Name into g
         select new SomeClass { Comm = g.Key, SIList = g.ToList(), Count = g.Count() };
Run Code Online (Sandbox Code Playgroud)

编辑:我想我们可以假设列表将是String这样我正在编辑.如果这是错误的类型,您需要相应地更改IList<T>定义.

  • @Gage:结构用于实现值类型,并且更难以正确实现,并且使用起来也更加棘手.你应该坚持使用类,直到你有充分的理由使用结构. (2认同)