【发布时间】:2021-04-22 19:40:17
【问题描述】:
我的想法是公开一个api 控制器/api/Events/{clientId}/{projectId}/{eventTypeId}
这些树形参数在查询我的db.Events 表时将起到过滤器的作用。
如果我通过ClientId,而不通过其他两个过滤器,它应该只通过ClientId 进行过滤。
我试过这个方法:
public async Task<IEnumerable<Event>> Handle(GetEventsByClientIdAndProjectIdQuery query, CancellationToken cancellationToken)
{
Expression<Func<Event, int?>> clientId = (s => query.ClientId);
Expression<Func<Event, int?>> projectId = (s => query.ProjectId);
Expression<Func<Event, int?>> eventTypeId = (s => query.EventTypeId);
if (query.ProjectId.HasValue)
{
projectId = (p => p.ProjectId.Equals(query.ClientId)); //error: cannot implicitly convert type bool to int?
}
if (query.EventTypeId.HasValue)
{
eventTypeId = (e => e.EventTypeId == query.EventTypeId.Value);
}
var evts = await _context.Events.Where(clientId) //error: Argument 2: cannot convert from 'System.Linq.Expressions.Expression<System.Func<UNW.Domain.Entities.Event, int?>>' to 'System.Func<UNW.Domain.Entities.Event, bool>'
.Where(projectId)
.Where(eventTypeId)
.ToListAsync();
if (evts == null)
return null;
return evts.AsReadOnly();
}
还有我的GetEventsByClientIdAndProjectIdQuery 模特:
public int? ProjectId { get; set; }
public int? ClientId { get; set; }
public int? EventTypeId { get; set; }
我错过了什么?
【问题讨论】:
标签: c# linq .net-core asp.net-core-webapi