簡體   English   中英

.NET服務OData從LINQ查詢返回匿名類型

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM