gpt4 book ai didi

c# - .NET 服务 OData 从 LINQ 查询返回匿名类型

转载 作者:行者123 更新时间:2023-11-30 17:48:17 24 4
gpt4 key购买 nike

我有 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 数组,但该数组是空的。

最佳答案

您可以使用字符串作为返回类型。

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 getCustomData = builder.EntityType<Order>().Collection.Function("GetCustomData");
getCustomData.Returns<string>();

关于c# - .NET 服务 OData 从 LINQ 查询返回匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23306617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com