问题描述
我想创建一个WCF数据服务ServiceOperation,它在服务器端进行分组,然后将数据发送到客户端。
I am trying create a WCF Data Services ServiceOperation that does grouping on the server side and then sends the data down to the client.
当我尝试调用它(甚至连接到服务),我得到一个错误。它说,它无法构造一个接口。
When I try to call it (or even connect to the service) I get an error. It says that it can't construct an interface.
我使用的唯一接口是IGrouping。
The only interface I am using is IGrouping.
什么是A /实际的类为这个接口?
What is a/the actual class for this interface?
更新:
我检查类型在调试一个示例应用程序,它告诉我,它是:
I checked the type while debugging a sample app and it told me it was:
System.Linq.Lookup<TKey,TElement>.Grouping
但是,什么组件是哪个?
But what assembly is it in?
推荐答案
若干类型的BCL实施 IGrouping
,但他们都是内置的,不能只是通过访问 IGrouping
接口。
Several types in the BCL implement IGrouping
, however they are all internal and cannot be accessed except by the IGrouping
interface.
但是,一个 IGrouping
只是一个的IEnumerable&LT; TElement&GT;
与相关联的密钥。您可以轻松地实施 IGrouping
是由名单,其中支持; TElement&GT;
键,这不应该是很难跨越序列化一个呼叫界限:
But an IGrouping
is merely an IEnumerable<TElement>
with an associated key. You can easily implement an IGrouping
that is backed by a List<TElement>
and that should not be hard to serialize across a call boundary:
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(); }
}
应用 GROUPBY
运营商后,您可以创建分组
实例列表:
After applying the GroupBy
operator you can create a list of Grouping
instances:
var listOfGroups =
source.GroupBy(x => ...).Select(g => new Grouping<TKey, TElement>(g)).ToList();
这篇关于对于IGrouping实现类是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!