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);