ASP NET Core 中 HttpGet 中的分组依据
Posted
技术标签:
【中文标题】ASP NET Core 中 HttpGet 中的分组依据【英文标题】:Group By in HttpGet in ASP NET Core 【发布时间】:2021-11-07 22:31:53 【问题描述】:我正在一个网页上工作,该网页上有一个客户订单列表。我在 ASP NET Core 中有我的后端,在 Angular 中有我的前端。我面临的问题是,当我使用 group by 发出 get 请求时出现错误
"System.InvalidOperationException: LINQ 表达式'(GroupByShaperExpression: KeySelector: (o.ClientId), 元素选择器:(实体形状表达式: 实体类型:订单 值缓冲区表达式: (ProjectionBindingExpression:EmptyProjectionMember) IsNullable: 假 ) )"
这就是我的web page 的样子。我不希望有重复的记录。
这是我尝试过的:
[HttpGet]
public async Task<ActionResult<IEnumerable<Order>>> GetOrders()
return await _database.Orders
.Include(c => c.Client)
.GroupBy(c => c.ClientId)
.Select(c => c.OrderBy(x => x.ClientId).FirstOrDefault())
.ToListAsync();
我在 ASP NET Core 中的课程是:
public class Order
public int Id get; set;
public int ClientId get; set;
public int ProductId get; set;
public int Quantity get; set;
public double Price get; set;
public Client Client get; set;
public Product Product get; set;
更新
我意识到我在课堂上遗漏了一个变量,所以它看起来像这样:
public class Order
public int Id get; set;
public int ClientId get; set;
public int ProductId get; set;
public int Quantity get; set;
public double Price get; set;
public byte[] Logo get; set;
public Client Client get; set;
public Product Product get; set;
【问题讨论】:
对不起,但根据代码,每个订单只有一个客户,所以......这是什么?.GroupBy(c => c.ClientId).Select(c => c.OrderBy(x => x.ClientId).FirstOrDefault())
如果能把预期的结果说清楚就更好了。 1 位客户可能会下超过 1 个订单。因此结果是正确的,因为它是根据订单查询的。 我不希望有重复的记录。。您是否尝试让每个客户都没有重复?也许Enumerable.Distinct 符合您的要求。
在您 GroubBy Client 之后,选择中的所有客户端都是平等的。如果您需要联系客户,请使用此功能。 .GroupBy(c => c.Client) .Select(c => c.Key)
@YongShun 没错,1 个客户可以下超过 1 个订单。我的数据库中有一个图像列,因此 Distinct 不起作用。
【参考方案1】:
我猜您正在尝试根据客户端 ID 对结果进行排序。在这种情况下,您可以尝试:
[HttpGet]
public async Task<ActionResult<IEnumerable<Order>>> GetOrders()
return await _database.Orders
.Include(c => c.Client)
.GroupBy(c => c.ClientId)
.OrderBy(c=>c.Key)
.Select(x=> as your need)
.ToListAsync();
已编辑:根据要求添加选择
【讨论】:
我在代码中遇到此错误:无法将 typ System.Collections.Generic.List>>' 隐式转换为 'Microsoft.AspNetCore.Mvc.ActionResult以上是关于ASP NET Core 中 HttpGet 中的分组依据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET CORE 3.0 中配置路由以使用带有 [FromQuery] 参数的重载 [HttpGet] 方法?
将数组传递给 asp net core web api 操作方法 HttpGet