【发布时间】:2021-09-24 19:23:25
【问题描述】:
我的 API 有这种方法,我试图过滤掉用户 (userId) 并按 EventId 分组。然后我想从表中选择三列:name、eventId 和UserId。
这是我的代码,但它不起作用:
[HttpGet("[action]/{userId}")]
public IActionResult EventsMatchFiltered(int userId)
{
var events = _dbContext.Events.Where(event1 => event1.UserId != userId)
.GroupBy(g => new {g.EventId })
.SelectMany(g => g.Select(h => new
{
Name = h.Name,
h.EventId,
h.UserId
}));
return Ok(events);
}
【问题讨论】:
-
没有以什么方式工作?
-
按
EventId分组有意义吗?我认为这是Event的独特PK?也就是说,GroupBy后跟SelectMany几乎可以肯定没有多大意义,因为这些组立即被展平,使得查询几乎与直接Select相同。再说一次,“它不起作用”并没有给我们太多的依据。 -
感谢您的反馈,但要澄清 EventId 不是主键,它更像是一个交叉引用。用外行的话来说,我所拥有的是一个包含以下列的事件表:Id、Name、UserId、EventId。我试图用我的方法做的是,如果我输入一个 userId 作为参数,那么它将过滤掉 userId 并按 eventID 分组。然后我希望它显示名称、UserId 和 EventId。根据一些反馈,我也尝试过此代码,但它返回 500 内部服务器错误。
-
这是最新的错误代码 public IActionResult EventsMatchFiltered(int userId) { var events = _dbContext.Events .Where(event1 => event1.UserId != userId) .GroupBy(g => g.EventId) .Select(g => new Event { EventId = g.Key, Events = g.Select(e => new Event { Name = e.Name, UserId = e.UserId }) });返回确定(事件); }
-
有一天您将不得不透露您收到的异常消息。不是“500”等。查询本身引发的异常。
标签: c# api entity-framework