在Entity Framework中查找具有特定属性的子实体

时间:2014-07-28 19:21:04

标签: 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 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; }
}

如您所见,EditedExpense是Expense的孩子。现在我想找到他们的CategoryId或他们的EditedExpense的CategoryId等于特定整数的所有费用。像这样:

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

但它抛出异常并说

  

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

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

我认为你可以在我们的.Include调用中没有.Where,只需将你的条件放在.Select调用中:

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

答案 1 :(得分:1)

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

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