0
        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我只需要选择FilterValToCatMapsFilterValue.Value参数ageProgType. FilterValues只能包含一个值,并且所有相关的FilterValToCatMaps和各自FilterValues 的都应该出现在所需的类别中。

我假设的(fm => fm.FilterValue.Value == age && fm.FilterValue.Value == ProgType)语句尝试检查两个参数值是否相同 FilterValToCatMap.FilterValue,而不检查FilterValToCatMap.FilterValue与类别相关的其他参数值是否包含下一个参数值。

FilterValToCatMaps - 表格

行号 | 筛选值 ID | 猫号

FilterValues - 表

行号 | 价值| 显示名称 | 过滤器ID

4

2 回答 2

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 的类别。

顺便说一句,fm.FilterValue.Value == age && fm.FilterValue.Value == ProgType仅当年龄和 ProgType 相等时才成立。

于 2012-05-12T13:51:00.270 回答
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 ) )
于 2012-05-12T13:52:31.743 回答