IGrouping的实现类是什么?

我正在尝试创建一个WCF数据服务ServiceOperation,它在服务器端进行分组,然后将数据发送到客户端。

当我尝试调用它(甚至连接到服务)时,我收到一个错误。 它说它无法构建一个接口。

我使用的唯一界面是IGrouping。

什么是这个界面的实际类?


更新:

我在调试示例应用程序时检查了类型,它告诉我它是:

System.Linq.Lookup.Grouping 

但它的组装是什么?

BCL中的几种类型实现了IGrouping ,但它们都是内部的,除了IGrouping接口之外无法访问。

但是, IGrouping仅仅是具有关联键的IEnumerable 。 您可以轻松实现由List支持的IGrouping ,并且不应该难以跨调用边界序列化:

 public class Grouping : IGrouping { readonly List elements; public Grouping(IGrouping grouping) { if (grouping == null) throw new ArgumentNullException("grouping"); Key = grouping.Key; elements = grouping.ToList(); } public TKey Key { get; private set; } public IEnumerator GetEnumerator() { return this.elements.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } 

应用GroupBy运算符后,您可以创建Grouping实例列表:

 var listOfGroups = source.GroupBy(x => ...).Select(g => new Grouping(g)).ToList(); 

这可能是IGrouping最基本和最通用的实现。 它的构造函数接受一个键和一组值。

 public class Grouping : IGrouping { private readonly TKey key; private readonly IEnumerable values; public Grouping(TKey key, IEnumerable values) { if (values == null) throw new ArgumentNullException("values"); this.key = key; this.values = values; } public TKey Key { get { return key; } } public IEnumerator GetEnumerator() { return values.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } 

我使用示例应用程序检查了类型,它是: System.Linq.Lookup.Grouping 。 但它的组装是什么?

它是嵌套在System.Linq.Lookup ; System.Core程序集内部。

  var groupingType = "1".GroupBy(x => x).Single().GetType().GetGenericTypeDefinition(); Console.WriteLine("Type: " + groupingType); Console.WriteLine("Public: " + groupingType.IsPublic); Console.WriteLine("Assembly: " + groupingType.Assembly); 

输出:

 Type: System.Linq.Lookup`2+Grouping[TKey,TElement] Public: False Assembly: System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 

从.NET 4.0开始,核心.NET框架中没有实现System.Linq.IGrouping公共类型。 如果你需要这样的类型(比如说可序列化的),你可能不得不自己滚动一个类型。

System.Core(在System.Core.dll中) http://msdn.microsoft.com/en-us/library/bb344977.aspx