繁体   English   中英

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

[英]Filtering Children in Entity Framework Query

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

数据库架构

如您所见,我们有WareCategories ,它将作为我将要在我的网站上使用的商品的类别。 WareTypes ,将作为每种项目类型的定义。 类别定义表WarePropertyDefinitions中的属性,而WarePropertyWarePropertyDefinitions表中已定义的每个属性定义值。

现在,我有一个搜索页面,用户可以在OldWares中搜索项目,然后用户选择类别,并且向用户显示WarePropertyDefinitions中定义的所有属性,如果用户希望获得更好的结果,则可以填充数据。 但是我的问题是我无法基于WareProperties过滤WareType ,因为它来自ICollection类型,并且我无法访问过滤器选项。

如何基于属性应用这种过滤?

提前致谢...

编辑:

这是我要描述的代码的一部分:

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的下拉菜单选择 我将在此定义中进行迭代,并为每个属性输入用户输入的值( 变量将保存用户输入的值,并且我将检查用户是否在文本框中输入了任何内容)我会将其包括在“位置”部分中(通过此i会将其添加到where子句中,从而最终过滤我的选择)。 但是如您所见,代码不完整,因为我不知道如何完成它。

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

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

我已经通过以下代码解决了我的问题:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM