[英]Filtering Children in Entity Framework Query
我有一个数据库,其架构如下:
如您所见,我们有WareCategories ,它将作为我将要在我的网站上使用的商品的类别。 WareTypes ,将作为每种项目类型的定义。 类别定义表WarePropertyDefinitions中的属性,而WareProperty为WarePropertyDefinitions表中已定义的每个属性定义值。
现在,我有一个搜索页面,用户可以在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.