可能重复:
OData pagination with WebApi ($inlinecount)实施的OData inlinecount使用asp.net的WebAPI
由于Asp.net的WebAPI几乎支持OData的,它很诱人,我得到$ inlinecount工作,所以它与kendo ui(或任何其他)搭配很好。 因此,它返回JSONP格式值,我实现了一个新的MediaFormatter(从#1)。
麻烦的是,它需要的结果,具有计数元素在其中,以获得服务器端分页的工作,所以现在我砍死格式化得到一个假的计数工作。这一切都很好,并且网格都很开心,但是由于返回的IQueryable表达式已经应用了filters/Take等,因此获得真正的计数是一个挑战。
public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext transportContext)
{
string callback;
if (IsJsonpCountableRequest(out callback))
{
return Task.Factory.StartNew(() =>
{
var q = value as IQueryable<Movie>;
var count = q.Count(); // this count doesnt return the actual count
var writer = new StreamWriter(stream);
writer.Write(callback + "({");
writer.Write(@"""d""");
writer.Write(" : { ");
writer.Write(@"""results""");
writer.Write(" : ");
writer.Flush();
base.WriteToStreamAsync(type, value, stream, contentHeaders, transportContext).Wait();
writer.Write(",");
writer.Write(@"""__count""");
writer.Write(" : ");
writer.Write(string.Format(@"""{0}""", count));
writer.Write("}");
writer.Write("})");
writer.Flush();
});
}
else
{
return base.WriteToStreamAsync(type, value, stream, contentHeaders, transportContext);
}
}
有没有一种方法分别获得计数,可能是从的IQueryable的潜在供应商?
你有任何机会将这个答案转移到Q我引用作为dup和VTCing(假设你同意),我会在那里赞成吗? (如果你不同意我可以删除评论) –
感谢你的举动 - 这是一个更快乐的整洁的怪物! –