1

値はすべてドロップダウン リストからのもので、null の場合もそうでない場合もあります。パラメータ値のいずれかが null であるかどうかに関係なく機能するクエリを作成する必要があります。以下は、すべてのパラメーターに値があり、それぞれすべての.Whereステートメントが真である場合にのみ機能し、結果を返します。null パラメーターが何にでも一致することを許可することを指定するために、いくつかのワイルドカード正規表現を考えています。そのため、パラメーターが多いほど検索精度は高くなりますが、一部しか指定されていないか、指定されていない場合でも機能します。

   public ActionResult GetResults(string age, string ProgType, string Country)
        {


                    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))
          .Where(c => c.RootCat.Name == Country)
          .Select(c => c.RootCat);



            return View();
        }
4

2 に答える 2

3

「Where」句を条件付きで適用できます-次のようなものです:

public ActionResult GetResults(string age, string ProgType, string Country)
{
    var query = _db.Categories
        .Where(c => c.CatSchema.TypeName == "Programs");

    if (String.IsNullOrWhiteSpace(age) == false)
    {
        query = query
            .Where(c => c.FilterValToCatMaps.Any(fm => fm.FilterValue.Value == age));
    }

    if (String.IsNullOrWhiteSpace(ProgType) == false)
    {
        query = query
            .Where(c => c.FilterValToCatMaps.Any(fm => fm.FilterValue.Value == ProgType));
    }

    if (String.IsNullOrWhiteSpace(Country) == false)
    {
        query = query
            .Where(c => c.RootCat.Name == Country);
    }

    var result = query
        .Select(c => c.RootCat);

    return View();
}
于 2012-05-12T16:45:08.713 に答える
1

where句でいつでも有効性を確認できます

.Where(c => IsInvalidParam() || Check())

または、あなたの場合の例は

.Where(c => String.IsNullOrEmpty(Country) || c.RootCat.Name == Country)

または、 Predicateを見てください。これは、次のような機能につながる可能性があります

public ActionResult GetResults(List<Predicate<CTYPE>> predicates)
    {
    var results = _db.Categories
      .Where(c => predicates.All(pred => pred(c)))
      .Select(c => c.RootCat);

    return View();
    }

ここでは、リストに有効な述語を含めるか、述語自体に入力の有効性をチェックさせ、フィルタリングできない場合は true を返すだけで済みます。

于 2012-05-12T15:35:19.977 に答える