[英].NET service OData return anonymous type from LINQ query
我有web api odata服務,我需要返回一些從LINQ查詢生成的數據,這些數據會使實體變平。 例如,我有一個訂單列表,我在數據服務端使用LINQ生成新屬性,以便我想返回計數介於0和100之間的訂單數,然后是另一個具有介於兩者之間的計數的屬性101和200.等。這是一個簡化的例子。
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>();
url讓我正確調用函數,但返回的json包含空數組。 例如:如果要返回6條記錄,則Json內部將有6個空[]。
我還嘗試返回Newtonsoft.Json.Linq.JObject並使用Newtonsoft將LINQ序列化為Json,但后來我遇到了運行時錯誤。
“復雜類型'JToken'通過屬性'Parent'引用自身。不允許復雜類型的遞歸循環。”
我知道我可以創建自定義類來解決這個問題,但必須有一些更簡單的方法將通用Json發送到客戶端,以便客戶端可以解包和讀取數據。
我也知道我可以將整個訂單/訂單詳細信息發送給客戶端,以便客戶端可以“計算”數據,但我希望從Web服務中留下有效負載。
我覺得我很接近,因為客戶端正在返回一個json數組,但數組是空的。
您可以使用string作為返回類型。
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(JsonConvert.SerializeObject(query));
}
FunctionConfiguration:
FunctionConfiguration getCustomData = builder.EntityType<Order>().Collection.Function("GetCustomData");
getCustomData.Returns<string>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.