Vac*_*ano 22 .net c# wcf-data-services
我正在尝试创建一个WCF数据服务ServiceOperation,它在服务器端进行分组,然后将数据发送到客户端.
当我尝试调用它(甚至连接到服务)时,我收到一个错误.它说它无法构建一个接口.
我使用的唯一界面是IGrouping.
什么是这个界面的实际类?
更新:
我在调试示例应用程序时检查了类型,它告诉我它是:
System.Linq.Lookup<TKey,TElement>.Grouping
Run Code Online (Sandbox Code Playgroud)
但它的装配是什么?
Mar*_*age 26
BCL实现中的几种类型IGrouping
,但它们都是内部的,除了IGrouping
接口外无法访问.
但是,IGrouping
仅仅是一个IEnumerable<TElement>
带有相关键的.您可以轻松实现IGrouping
由a支持的List<TElement>
并且不应该难以跨调用边界序列化:
public class Grouping<TKey, TElement> : IGrouping<TKey, TElement> {
readonly List<TElement> elements;
public Grouping(IGrouping<TKey, TElement> grouping) {
if (grouping == null)
throw new ArgumentNullException("grouping");
Key = grouping.Key;
elements = grouping.ToList();
}
public TKey Key { get; private set; }
public IEnumerator<TElement> GetEnumerator() {
return this.elements.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
}
Run Code Online (Sandbox Code Playgroud)
应用GroupBy
运算符后,您可以创建Grouping
实例列表:
var listOfGroups =
source.GroupBy(x => ...).Select(g => new Grouping<TKey, TElement>(g)).ToList();
Run Code Online (Sandbox Code Playgroud)
AJ *_*son 11
这可能是IGrouping最基本和最通用的实现.它的构造函数接受一个键和一组值.
public class Grouping<TKey, TElement> : IGrouping<TKey, TElement>
{
private readonly TKey key;
private readonly IEnumerable<TElement> values;
public Grouping(TKey key, IEnumerable<TElement> values)
{
if (values == null)
throw new ArgumentNullException("values");
this.key = key;
this.values = values;
}
public TKey Key
{
get { return key; }
}
public IEnumerator<TElement> GetEnumerator()
{
return values.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
我用一个示例应用程序检查了类型,它是这样的:
System.Linq.Lookup<TKey,TElement>.Grouping
。但它在什么程序集中?
它是一种嵌套在System.Linq.Lookup<TKey,TElement>
; 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);
Run Code Online (Sandbox Code Playgroud)
输出:
Type: System.Linq.Lookup`2+Grouping[TKey,TElement]
Public: False
Assembly: System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Run Code Online (Sandbox Code Playgroud)
从 .NET 4.0 开始,核心 .NET 框架中没有实现System.Linq.IGrouping<TKey,TElement>
. 如果您需要这样一种类型(比如说它是可序列化的),不幸的是,您可能必须自己滚动一个。
归档时间: |
|
查看次数: |
13481 次 |
最近记录: |