字符串如何转成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) 统计用户浏览页面总数 C#汉字的问题 在线等 请问2005数据库怎么导到2000,我试着直接导入,但是出错拉, 请教,集合中Queue和Stack具体应用在什么地方?谢谢 C#有绘制复杂函数图象的控件么? 哪里有rational xde 下载啊? 一个Windows Service在什么情况下会异常结束? 散分,顺便问点问题 关于C#+ASP.NET入门 如何使用PostMessage向记事本发送一个关闭的消息? 啥时候可以用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)