.Include()。Where()。Linq to Entities Query中的.Select()

我有一个查询下表的Linq查询:具有一对多链接的任务:TaskLinks和TaskLinks具有指向实体的表的一对一链接。

我正在尝试选择任务,急切加载(通过.Include)TaskLinks并选择链接到TaskLink的实体。 但是我需要过滤Task(通过Access Level int)和TaskLinks,这样我就不会包含任何Inactive(bool)记录。

这是我的Linq查询:

Tasks.Where(t => t.AccessLevel  tl.TaskLinks.Where(tl2=> tl2.IfInactive == false) .Select(tls => tls.Entity)) 

我在LinqPad中运行此查询,我收到以下错误,我不明白:

ArgumentException:Include路径表达式必须引用在类型上定义的导航属性。 使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。 参数名称:路径

如何重新编写此查询以便我可以过滤包含的任务链接,并选择实体?

先感谢您!!

短发

.Include(...) ‘建议’到查询提供程序以急切加载导航属性。 在这种情况下,它不会这样做b / c你的结果不是Task实体,它们是Entity实体。

在任何情况下,您都不会在include语句中过滤集合导航属性(这会导致您的错误)。

您需要以下内容:

 // start with Tasks, filter by AccessLevel Tasks.Where( t => t.AccessLevel <= 5 ) // get the TaskLinks for each Task .SelectMany( t => t.TaskLinks ) // filter TaskLinks by IfInactive == false .Where( tl => !tl.IfInactive ) // update to keep the hierarchy you want .GroupBy( tl => tl.Task ) .Select( g => new { Task = g.Key, FilteredTaskLists = g.Select( tl => new { TaskList = tl, Entity = tl.Entity } ) } );