字符串如何转成LINQ表达式呢?麻类有经验的大牛指点一下 可以用dynamic linq这个库。如果不涉及表达式解析,也可以构造表达式树,参考http://bbs.csdn.net/topics/390914025 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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; } }} 在4.0框架上没有System.Linq.Dynamic.DynamicExpressionPS,需要把字符串转表达式 好麻烦。你的a是手动拼接的,为什么要搞成字符串?在也有错误,user=>u.name==txtName 不是user=> ,是u=>。看看下面的Func<User, bool> filterFunc = u=>u.name==txtName;db.user.where(filterFunc); 是的,一楼是写错了,我目的就是想把字符串改为LINQ表达式 自己写一个转换器,或者上网找。lambdaparse(string xxx) cfrmsplash 要引用什么命名空间? MemoryStream.read不到值 设置主窗体问题 请问怎么动态获得web services中的类名和方法名? 怎么判断程序是在桌面操作系统里还是在Pocket PC仿真机里面运行? 25次回复中23次up的问题,太难?太简单? ListBox控件中selectitem 有多个项 如何选自己想要的项 在winform中对datagrid里面值修改后怎样更新到数据库?(帮顶有分) 关于datagrid分页 C#函数问题 啥时候可以用C#玩单片机开发啊? c#生成的htm文件在word中打开的问题
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;
}
}
}
PS,需要把字符串转表达式
看看下面的Func<User, bool> filterFunc = u=>u.name==txtName;
db.user.where(filterFunc);
lambdaparse(string xxx)