如何在(.Where)语句中检查多个值,以便选择相同的类型但具有不同的值

时间:2012-05-12 13:34:22

标签: c# entity-framework linq-to-entities

        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等于参数FilterValuesFilterValToCatMaps中指定的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

2 个答案:

答案 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 ) )