我有一个数据库,其架构如下:
正如您所看到的,我们有 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子句中)。但是你可以看到代码不完整,因为我不知道如何完成它。
答案 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的答案是我问题的基础,所以我选择了他的答案作为我问题的默认答案。非常感谢。