首页 > 解决方案 > 使用子实体上的条件进行一对多(父实体和子实体)Linq

问题描述

我有三个实体

Form
 FormProducts (one to Many attach to Form)
 FormFields (one to Many attach to Form)

当我得到 Form(使用下面的代码)时,FormProducts 和 FormFields 隐式附加到表单,这是我们所需要的。

Form result = Forms.Where(f => f.Code == "form1").FirstOrDefault()

到目前为止一切顺利,但新的要求是我们还需要检查活动产品的产品标准。

有没有简单的方法呢?或者我应该明确地使用所有三个实体的连接。

我看起来很简单:)

Form result = Forms.Where(f => f.Code == "form1" && f.FormProducts.status == "active").FirstOrDefault()

更新: 对不起,如果我没有说清楚,请考虑表格中的以下数据

Form 
id, code(unique)
1, form1, 
2, form2
3, form3

FormProduct
id, formid, name, status
1, 1, prod1, true
2, 1, prod2, false
3, 1, prod3, true

FormField
id, formid, name
1, 1, field1
2, 1, field1
3, 1, field1

我喜欢获取 form1 及其所有 formFields 和所有活动 formProducts。这意味着不应包含 Prod2。

标签: entity-frameworklinq

解决方案


我不确定这是否是实现它的最佳方法,但这就是我暂时实现它的方式,直到我找到更好的方法。

Form result = Forms.Where(f => f.Code == "form1").FirstOrDefault()
result.FormProducts = result.FormProducts.Where(f.FormProducts.status == "active").ToList();

推荐阅读