Linq 在实体框架中查找具有特定属性的子实体

Linq 在实体框架中查找具有特定属性的子实体,linq,entity-framework,entity-relationship,Linq,Entity Framework,Entity Relationship,以下是我的代码和实体之间的关系 public class Expense { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ExpenseId { get; set; } [Required] public int CategoryId{ get; set; } [ForeignKey("CategoryId")] public virtual Cat

以下是我的代码和实体之间的关系

public class Expense
{
  [Key]
  [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
   public int ExpenseId { get; set; }

  [Required]
  public int CategoryId{ get; set; }
  [ForeignKey("CategoryId")]
  public virtual Category Category { get; set; }

  public virtual List<EditedExpense> EditedExpenses { get; set; }
}
public class EditedExpense
{
   [Key]
   [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
   public int EditedExpenseId { get; set; }

   [Required]
   public int CategoryId{ get; set; }
   [ForeignKey("CategoryId")]
   public virtual Category Category { get; set; }

   public int ExpenseId { get; set; }
}
但它提出了一个例外,并说

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


我遗漏了什么吗?

我认为您可以不使用我们的.Include呼叫中的.Where,只需将您的情况放在.Select呼叫中即可:

 db.Expenses
      .Where(exp => exp.CategoryId == 1)
      .Include(exp => exp.EditedExpenses
           .Select(editedExp => editeExp => editedExp.CategoryId == 1));

我在这里解决的问题是代码

db.Expenses.Where(exp => exp.CategoryId == 1 || exp.EditedExpenses.Any(ee => ee.CategoryId == 1).Include(exp => exp.EditedExpenses);

你为什么不重新进行过滤呢?
EditedExpense
?如果
Expense
CategoryId无效,则它下面的所有
EditedExpense
也必须无效,对吗?所有费用都有有效的CategoryId
db.Expenses.Where(exp => exp.CategoryId == 1 || exp.EditedExpenses.Any(ee => ee.CategoryId == 1).Include(exp => exp.EditedExpenses);