如何建立这种复杂的LINQ表达? [英] How to build this complex Linq expression?
本文介绍了如何建立这种复杂的LINQ表达?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我要从字符串List 构建一个System.Linq.Expression
I want to build a System.Linq.Expression from the string List like this:
System.Linq.Expressions.Expression x = null;
foreach (string s in GetWords(input))
{
/* Create Expression */
}
所以我可以使用:
.Where(x =>
x.Name.Like(string.Format("%{0}%", word1)) ||
x.Name.Like(string.Format("%{0}%", word2)) ||
x.Name.Like(string.Format("%{0}%", word3)) ||
x.Id.ToString().Like(string.Format("%{0}%", word1)) ||
x.Id.ToString().Like(string.Format("%{0}%", word2)) ||
x.Id.ToString().Like(string.Format("%{0}%", word3)) ||
);
x
is MyObject
推荐答案
类似:
string[] words = { "foo", "bar", "blop" }; // your data
Expression body = null;
var param = Expression.Parameter(typeof(SomeType), "x");
var id = Expression.PropertyOrField(param, "Id");
var name = Expression.PropertyOrField(param, "Name");
foreach (string word in words)
{
var wordExpr = Expression.Constant(word, typeof(string));
var wordTest = Expression.OrElse(
Expression.Call(id, "Contains", null, wordExpr),
Expression.Call(name, "Contains", null, wordExpr));
body = body == null ? wordTest : Expression.OrElse(body, wordTest);
}
Expression<Func<SomeType,bool>>lambda;
if (body == null) { lambda = x => false; }
else { lambda = Expression.Lambda<Func<SomeType, bool>>(body, param); }
这篇关于如何建立这种复杂的LINQ表达?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文