可以用dynamic linq这个库。如果不涉及表达式解析,也可以构造表达式树,参考
http://bbs.csdn.net/topics/390914025

解决方案 »

  1.   


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Linq.Expressions;namespace StringToExpressionTreeTest
    {
        class Program
        {
            public class User
            {
                public string Name { get; set; }
                public string Phone { get; set; }
            }        static void Main(string[] args)
            {
                var exp = @"user => user.Name == txtName";
                //var exp = @"user => user.Name != txtName"; //for testing 
                //var exp = @"user => user.Name.Contains(txtName)"; ////for testing 
                var txtName = "abc";            var users = new List<User>() 
                { 
                     new User { Name = "abc", Phone = "a123"},
                     new User { Name = "xyz", Phone = "x123"},
                };            var e = BuildExpression(exp);
                Predicate<User> g = user => (bool)e.Compile().DynamicInvoke(user, txtName);
                //var query = users.Where(user => g(user));
                var query = users.FindAll(g);            
                //Expression<Func<User, string, object>> g = (obj, s)  => e.Compile().DynamicInvoke(obj, s); //for db
                //Func<User, string, bool> g = (obj, s) => (bool)e.Compile().DynamicInvoke(obj, s); // for objets
                //var query = users.Where(user => g(user, txtName));          
                foreach (var each in query)
                    Console.WriteLine("{0} {1}", each.Name, each.Phone);
                Console.ReadKey();
            }        private static LambdaExpression BuildExpression(string expression)
            {
                var exp = expression.Split(new string[] { "=>" }, StringSplitOptions.None)[1];
                var p1 = Expression.Parameter(typeof(User), "user");
                var p2 = Expression.Parameter(typeof(string), "txtName");            var e = System.Linq.Dynamic.DynamicExpression.ParseLambda(
                    new[] { 
                        p1, 
                        p2 
                    },
                    null,
                    exp);
                return e;
            }
        }
    }
      

  2.   

    在4.0框架上没有System.Linq.Dynamic.DynamicExpression
    PS,需要把字符串转表达式
      

  3.   

    好麻烦。你的a是手动拼接的,为什么要搞成字符串?在也有错误,user=>u.name==txtName  不是user=> ,是u=>。
    看看下面的Func<User, bool> filterFunc = u=>u.name==txtName;
    db.user.where(filterFunc);
      

  4.   

    是的,一楼是写错了,我目的就是想把字符串改为LINQ表达式
      

  5.   

    自己写一个转换器,或者上网找。
    lambdaparse(string xxx)