我正在使用返回的Queryable上的.FirstOrDefault()尝试.NET中的WCF数据服务。但是当与Fiddler一起检查时,它仍然会返回整组对象。我必须做错什么?
代码非常基本:
[OperationContract]
IQueryable<Note> Query();
[WebGet(UriTemplate = "")]
public IQueryable<Note> Query()
{
return _source.OfType<Note>().AsQueryable<Note>();
}
Note note = _client.Query().FirstOrDefault();
这仍将通过网络产生并传输所有笔记。
我错过了什么?
我是否可以将IQueryable和“远程LINQ”与普通的WCF Web服务一起使用?
我找到了一些例子,他们在本地使用DataService(T)和DataServiceContext作为客户端。我确实尝试过,但我从来没有让它工作过。
我唯一需要的是这个“远程LINQ”功能,所以我可以通过LINQ查询我的Web服务,而不是只响应所有项目,例如,只请求第一个。
答案 0 :(得分:2)
当你调用FirstOrDefault()时,你在客户端,所以你将收到整个列表,你的客户将过滤它只获得第一个。如果你只想下载第一个元素,你需要一个特殊的webMethod你在服务器端做firstOrDefault。
[WebGet]
public Note QueryFirst()
{
return _source.OfType<Note>().AsQueryable().FirstOrDefault();
}
答案 1 :(得分:0)
我使用NETFx HttpEntityClient使用First()遇到了其他问题。使用First()时会抛出NotSupportedException。
OData不支持First,但支持Take或Skip。
这是我最终要做的事情:
Note note = _client.Query().Take(1).ToArray().FirstOrDefault();