Asp.net WebAPI はほとんど odata をサポートしているため、$inlinecount を機能させて kendo ui (またはその他) とうまく連携させることは非常に魅力的です。jsonp 形式で値を返すように、新しい MediaFormatter (Stackoverflow から) を実装しました。
問題は、サーバー側のページングを機能させるために結果にカウント要素を含める必要があることです。そのため、今のところフォーマッターをハッキングして偽のカウントを機能させました。これはすべてうまく機能し、グリッドはすべて満足していますが、返される IQueryable 式には既にフィルター/テイクなどが適用されているため、実際のカウントを取得することは困難です。
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 の基になるプロバイダーからのものである可能性がありますか?