【发布时间】: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 不起作用。
标签: c# asp.net-core group-by http-get