我需要一个返回所有Driver
的查询,包括每个Departures
集合,其中每个集合都按Departure
的属性进行过滤。
此查询:
// id supplied by HTTP POST
var driver = await _context.Drivers
.Include(d => d.Departures.Where(dd => dd.Acknowledged == false))
.SingleOrDefaultAsync(m => m.ID == id);
生成错误:
InvalidOperationException:属性表达式'd => {从 出发dd in.d.Departures where([dd] .Acknowledged == False)select [dd]}'无效。表达式应代表属性 访问:'t => t.MyProperty”。有关包括相关的更多信息 数据,请参阅http://go.microsoft.com/fwlink/?LinkID=746393。
我不理解什么?
Driver
有很多Departures
Departure
有一个Driver
驱动:
public class Driver
{
public int ID { get; set; }
...
public virtual ICollection<Departure> Departures { get; set; }
}
出发:
public class Departure
{
public int ID { get; set; }
public Boolean Acknowledged { get; set; }
...
public int DriverID { get; set; }
public virtual Driver Driver { get; set; }
}
将EF Core 2.0与VS Studio for Mac配合使用。
答案 0 :(得分:0)
您无法对Driver
对象本身的离场进行过滤,但您可以根据返回值对其进行过滤:
var driverAndDepartures = await _context.Drivers
.Select(d => new {
Driver = d
, UnacknowledgedDepartures = d.Departures.Where(dd => !dd.Acknowledged).ToList()
})
.SingleOrDefaultAsync(m => m.ID == id);
返回driverAndDepartures
并null
- 检查结果后,您可以通过driverAndDepartures.Driver
获取驱动程序,并通过driverAndDepartures.UnacknowledgedDepartures
字段获取未确认的离开。
如果您尝试获取driverAndDepartures.Driver.Departures
,您将阅读整个未经过滤的离队集。