开发者

LINQ Expression in dataset

开发者 https://www.devze.com 2023-04-12 09:50 出处:网络
i am getting problems while passing expression in dataset where condition.. I am pasting all my codes .. please correct me if i am wrong and suggest if there are short methods..

i am getting problems while passing expression in dataset where condition.. I am pasting all my codes .. please correct me if i am wrong and suggest if there are short methods..

code is to check (age>10)&&(gender=='M'), i need to apply this rule in dataset.

  Expression<Func<int, bool>> ageexpr; // = creteriaattributeIDtest => creteriaattributeIDtest < Convert.ToInt32(rightval1);

         ParameterExpression numparam = Expression.Parameter(typeof(int), "age");
         ConstantExpression criteriaValue1 = Expression.Constant(Convert.ToInt32(rightval1), typeof(int));
         BinaryExpression comparison1 = Expression.LessThan(numparam, criteriaValue1);

         ageexpr = Expression.Lambda<Func<int, bool>>(
                 comparison1,
                new ParameterExpression[] { numparam });

         Func<int, bool> resultage = ageexpr.Compile();

         // Invoking the delegate and writing the result to the console.

         bool firstrule = resultage(14);

         Console.WriteLine("1st Rule" + firstrule);

        // DataView res1 = dt1.AsEnumerable().Where(resultage(Convert.ToInt32(rightval1))).AsDataView();


         Expression<Func<string, bool>> genexpr;

         ParameterExpression genparam = Expression.Parameter(typeof(string), "gender");
         ConstantExpression criteriaValue2 = Expression.Constant("M", typeof(string));
         BinaryExpression comparison2 = Expression.Equal(genparam, criteriaValue2);

         genexpr = Expression.Lambda<Func<string, bool>>(
                 comparison2,
                new ParameterExpression[] { genparam })开发者_开发技巧;

         Func<string, bool> resultgen = genexpr.Compile();

         bool secondrule = resultgen("M");

         // Invoking the delegate and writing the result to the console.
         Console.WriteLine("2nd Rule" + secondrule);


         Expression finexpr = Expression.AndAlso(Expression.Constant(firstrule), Expression.Constant(secondrule));
         Console.WriteLine(Expression.Lambda<Func<bool>>(finexpr).Compile()());


Not quite clear what your problem actually is, but if you just want to create a DataView via LINQ, why not use something like this:

    static void Main(string[] args)
    {
        var minimunAge = 10;

        var t = new DataTable();
        t.Columns.Add("age", typeof(Int32));
        t.Columns.Add("gender", typeof(string));
        t.Columns.Add("name", typeof(string));

        t.Rows.Add(20, "M", "Steve");
        t.Rows.Add(5, "M", "John");
        t.Rows.Add(32, "F", "Mary");

        var view = t.AsEnumerable().Where(r => r.Field<Int32>("age") > minimunAge && r.Field<string>("gender") == "M").AsDataView();
    }

If you really want to use Expressions, try this:

    static void Main(string[] args)
    {
        var t = new DataTable();
        t.Columns.Add("age", typeof(Int32));
        t.Columns.Add("gender", typeof(string));
        t.Columns.Add("name", typeof(string));

        t.Rows.Add(20, "M", "Steve");
        t.Rows.Add(5, "M", "John");
        t.Rows.Add(32, "F", "Mary");

        Expression<Func<int, bool>> ageexpr;

        ParameterExpression numparam = Expression.Parameter(typeof(int), "age");
        ConstantExpression criteriaValue1 = Expression.Constant(Convert.ToInt32(10), typeof(int));
        BinaryExpression comparison1 = Expression.GreaterThan(numparam, criteriaValue1);

        ageexpr = Expression.Lambda<Func<int, bool>>(
                comparison1,
               new ParameterExpression[] { numparam });

        Func<int, bool> resultage = ageexpr.Compile();

        // Invoking the delegate and writing the result to the console.

        bool firstrule = resultage(14);

        Console.WriteLine("1st Rule" + firstrule);

        DataView res1 = t.AsEnumerable().Where(r=> resultage(r.Field<Int32>("age"))).AsDataView();
    }

You have to pass a parameter to your delegates.

0

精彩评论

暂无评论...
验证码 换一张
取 消