var results = _db.CatSchemas.FirstOrDefault(s => s.TypeName == "Programs")
.Categories.Where(c => c.FilterValToCatMaps.Where
(fm => fm.FilterValue.Value == age && fm.FilterValue.Value == ProgType).Count() > 0)
.Select(c => c.Category1);
如果我删除&& fm.FilterValue.Value == ProgType
查询有效但当然只返回
结果仅按age
过滤。
我要求只选择Categories
FilterValToCatMaps
FilterValue.Value
age
ProgType
等于参数FilterValues
和FilterValToCatMaps
中指定的FilterValues
。 (fm => fm.FilterValue.Value == age && fm.FilterValue.Value == ProgType)
只能包含一个值,所有相关的FilterValToCatMap.FilterValue
和相应的FilterValToCatMap.FilterValue
都应该出现在所需的类别中。
我假设{{1}}语句尝试检查相同 {{1}}的两个参数值是否为真,而不检查其他{{1}}是否与类别包含下一个参数值。
FilterValToCatMaps - 表
LineID | FilterValueID |的 CATID
FilterValues - 表
LineID | 价值 | DisplayName | FilterID
答案 0 :(得分:1)
我认为你可以这样做:
var results = _db.CatSchemas.FirstOrDefault(s => s.TypeName == "Programs")
.Categories.Where(c => c.FilterValToCatMaps.Any
(fm => fm.FilterValue.Value == age && fm.FilterValue.Value == ProgType));
因此,它将返回具有FilterValToCapMaps的类别以及任何查询。
BTW,fm.FilterValue.Value == age && fm.FilterValue.Value == ProgType
仅在年龄和ProgType等于的情况下才为真。
答案 1 :(得分:1)
如果您想要一个类别列表作为结果,通常应该从_db.Categories
开始。
此外,因为您同时需要FilterValues
,而不是其中之一,您可以将该子句拆分为2个Where
子句。
var results = _db.Categories
.Where( c => c.CatSchema.TypeName == "Programs" )
.Where( c => c.FilterValToCatMaps.Any( fm => fm.FilterValue.Value == age ) )
.Where( c => c.FilterValToCatMaps.Any( fm => fm.FilterValue.Value == ProgType ) )