可能重複:
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(假設你同意),我會在那裏贊成嗎? (如果你不同意我可以刪除評論) –
感謝你的舉動 - 這是一個更快樂的整潔的怪物! –