1

レコードのリストをフィルタリングするための一般的な関数を使用しています。

関数は以下のとおりです。

  class FilterRecords
{

    public static object ParseExpression(string Condition, string FilterColumn)
    {
        string _operator = "";
        string _condition = "";                       

        if (Condition.Substring(0, 1) == "<" || Condition.Substring(0, 1) == ">")
        {
            _operator = Condition.Substring(0, 1);

            if (Condition.Substring(1, 1) == "=")
            {
                _operator += "=";
                _condition = Condition.Substring(2);
            }
            else
            {
                _condition = Condition.Substring(1);
            }
            _operator = "=";
            return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " " + _operator + " " + " @0", _condition).ToList());
        }
        else
        {
            if (Condition.Contains(','))
            {
                string[] conds = Condition.Split(',');
                return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " >= @0 && " + FilterColumn + " <= @1", conds).ToList());

            }
            else
            {
                return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " == @0", Condition).ToList());
            }
        }
    }
}

この関数は動的クエリライブラリを使用します。現時点では、1つのタイプのレコード(OrdsRlsds)のみをフィルタリングします。これを汎用フィルターにして、任意のコレクションを渡して、フィルター処理された結果を取り戻すことができるようにする必要があります。

4

1 に答える 1

1

Entity Frameworkを使用していますか?もしそうなら、ジェネリックでこのようなことをすることができますか?

public static IList<T> ParseExpression<T>(string Condition, string FilterColumn) where T:class
{
  var query = dbContext
              .CreateObjectSet<T>()
              .AsQueryable();

  //add filters etc.

  return query.ToList();
}

次に、必要なエンティティタイプをタイプ引数として次のようにメソッドに渡す必要があります。

FilterRecords.ParseExpression<OrdsRlsd>(condition, filterColumn);
于 2012-11-26T16:54:27.630 に答える