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ものだけを選択する必要があります。1つの値のみを含めることができ、関連するすべての値とそれぞれ が必要なカテゴリに存在する必要があります。FilterValToCatMapsFilterValue.ValueageProgTypeFilterValuesFilterValToCatMapsFilterValues

私が推測するステートメントは、2つのパラメーター値が同じ(fm => fm.FilterValue.Value == age && fm.FilterValue.Value == ProgType)ものに対して真であるかどうかをチェックしようとし、カテゴリーに関連する他のパラメーター値が次のパラメーター値を含むかどうかをチェックしません。 FilterValToCatMap.FilterValueFilterValToCatMap.FilterValue

FilterValToCatMaps-テーブル

LineID | FilterValueID | CatID

FilterValues-テーブル

LineID | | DisplayName | FilterID

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 == ProgTypeageと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 に答える