我有web api odata服務,我需要返回一些數據,這些數據是從實體變扁平的LINQ查詢中生成的。例如,我有一個訂單列表,我已經在數據服務端使用LINQ來生成新的屬性,以便我想返回計數介於0和100之間的訂單數,然後計算另一個計數介於101和200等。這裏是一個簡化的例子。
.NET服務OData返回來自LINQ查詢的匿名類型
Public IHttpActionResult GetCustomData()
{
var query = (from o in Orders
select CustomerName = o.CustomerName,
LowerCount = o.OrderDetails.Where(f => f.Pieces >= 0 && f.Pieces <= 100).Count(),
MidCount = o.OrderDetails.Where(f => f.Pieces >= 101 && f.Pieces <= 200).Count(),
HighCount = o.OrderDetails.Where(f => f.Pieces >= 201).Count()
);
return Ok(query);
}
在我WebApiConfig我的代碼FunctionConfiguration類似以下內容:
FunctionConfiguration getCustomData = builder.EntityType<Order>().Collection.Function("GetCustomData");
getCustomData.Returns<Object>();
的網址讓我正確地調用函數,但返回的JSON包含空數組。例如:如果有6條記錄要返回,那麼Json裏面會有6個空[]。
我也嘗試返回Newtonsoft.Json.Linq.JObject並使用Newtonsoft將LINQ序列化爲Json,但後來我得到一個運行時錯誤。
「複雜類型'JToken'通過屬性'Parent'引用自身,複雜類型的遞歸循環是不允許的。」
我知道我可以創建自定義類來解決這個問題,但必須有一些更簡單的方法將通用Json發送到客戶端,以便客戶端可以展開和讀取數據。
我也知道我可以將整個訂單/訂單詳細信息發送給客戶端,以便客戶端可以對數據進行「計數」,但我希望將來自Web服務的有效負載減小。
我覺得我很近,因爲客戶端正在取回一個json數組,但數組是空的。
你可以嘗試getCustomData.Returns()和方法公開IHttpActionResult GetCustomData()返回通用的JSON字符串? –