以下是我的代码和实体之间的关系,
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运算符作为集合导航属性 参数名称:路径
我错过了什么吗?
答案 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);