在实体框架查询中过滤子项

时间:2017-10-06 22:10:13

标签: c# sql asp.net database entity-framework

我有一个数据库,其架构如下:

Database Schema

正如您所看到的,我们有 WareCategories ,这将是我将在我的网站上工作的商品的类别。 WareTypes ,它将是每个Item类型的定义。类别定义表 WarePropertyDefinitions WareProperties 中的属性,为 WarePropertyDefinitions 表中定义的每个属性定义值。

现在我有一个搜索页面,用户在 OldWares 中搜索项目,用户选择类别,我向用户显示 WarePropertyDefinitions 中定义的所有属性,用户填写数据他喜欢更好的结果。但我的问题是,我无法根据 WareProperties 过滤 WareTypes ,因为它来自 ICollection 类型,我可以& #39; t访问过滤器选项。

如何根据属性应用此类过滤?

提前致谢...

编辑:

这是代码的一部分,我将介绍更多内容:

var lst = WareCategory.GetItem(Convert.ToInt32(ddlChildren.SelectedValue)).WarePropertyDefinitions.ToList();
                foreach (var ListItem in lst)
                {
                        var value = BaseHelper.FindFormValue("PropertyValue" + ListItem.Id.ToString());
                        if (!string.IsNullOrEmpty(value))
                        {
                            query = query.Where(m => m.WareType.WareProperties.);
                        }
                    }
                }

这段代码在我的搜索功能中,您可以看到我将生成用户通过名为的下拉菜单选择的 WarePropertyDefinition 中的项目列表ddlChildren 即可。我将迭代此定义并且用户为每个属性输入值(变量将保存用户输入的值,我将检查用户是否在文本框中输入了任何内容)我将将它包含在where部分中(通过这个我将它添加到最终过滤我的选择的where子句中)。但是你可以看到代码不完整,因为我不知道如何完成它。

2 个答案:

答案 0 :(得分:2)

使用Any()扩展方法,例如:

query = query.Where(m => m.WareType.WareProperties.Any(wp => wp.Id == 5));

答案 1 :(得分:0)

我已通过此代码解决了我的问题:

query = query.Where(m => m.WareType.WareProperties.Any(wp => wp.WarePropertyDefinition_Id == ListItem.Id && wp.TextValue == value));

但是因为@ user3159792的答案是我问题的基础,所以我选择了他的答案作为我问题的默认答案。非常感谢。