gpt4 book ai didi

linq - 当 LINQ Count() 方法不起作用时,从 Netflix oData 服务返回计数

转载 作者:行者123 更新时间:2023-12-04 15:04:50 27 4
gpt4 key购买 nike

有没有办法使用 LINQ 表达式从 Silverlight 4 中的 Netflix oData 服务请求 Count 查询?

The Netflix documentation shows that you can return counts by appending $count to a request for a collection ,但是一个像这样的 URL:

http://netflix.cloudapp.net/Catalog/Genres/$count

不是从这样的表达式生成的:
var count = (from g in catalog.Genres select g).Count();

上面的代码返回一个错误,指出不支持 Count 方法。有没有办法在 LINQ 中做到这一点,或者我只需要发出 WebClient 请求来获取值?

最佳答案

Silverligth 不支持 Count 和 LongCount,因为它们需要同步执行查询。由于 Silverlight 要求所有网络操作都是异步的,因此这是不可能的。

您可以不使用 DataServiceContext(或相关类)以编程方式发出有问题的 HTTP 查询,因为 $count 返回数字的文本表示,解析响应并不难。

或者你可以使用一些技巧。您可以使用 IncludeTotalCount() 将 $inlinecount=allpages 查询选项添加到查询中,该选项将在响应中包含计数。然后不要从服务器下载所有实体,您可以使用 Take(0) 这将添加 $top=0 从而返回空结果集。但内联计数仍将包含正确的数字。

您可以访问 QueryOperationResponse.TotalCount 属性上的内联计数。
像这样的东西:

    NetflixCatalog ctx = new NetflixCatalog(new Uri("http://netflix.cloudapp.net/Catalog"));
var q = (DataServiceQuery<Genre>)ctx.Genres.IncludeTotalCount().Take(0);
q.BeginExecute((ar) =>
{
QueryOperationResponse<Genre> r = (QueryOperationResponse<Genre>)q.EndExecute(ar);
r.TotalCount.ToString(); // Use the count in whatever way you need
}, null);

关于linq - 当 LINQ Count() 方法不起作用时,从 Netflix oData 服务返回计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2828026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com