【发布时间】:2013-11-08 21:47:34
【问题描述】:
我正在使用 linq 表达式树 (http://msdn.microsoft.com/en-us/library/vstudio/bb397951.aspx) 来创建复杂的、动态创建的自定义过滤器。 现在我需要创建一个表达式,它不比较我的表的属性,而是 我拆分财产的每一部分。
相应的静态 linq 语句为:
myContext.MyEntityCollection
.Where(item => item.MyProperty != null)
.AsEnumerable<MyEntity>()
.Select(item => item.MyProperty.Split(new[] { ',' })
.Where( .. my filter ..)
例如在这个输入上
Table MyEntity
Id MyProperty
-----------------------------------
1 part1,part2,part3,part4
2 part5,part6
我想搜索“part3”并获得第一行。
如何为 split func 创建 lambda 表达式?
UPDATE:这是我目前的状态(在最后一行我卡住了)。我还尝试使用 ExpressionTreeViewer 从上面的 linq 语句构建表达式树,但它不起作用,我认为是因为“.AsEnumerable”。
ParameterExpression param = Expression.Parameter(typeof(ReportIndex), "MyEntity");
MemberExpression stringProperty = Expression.Property(param, "MyProperty");
MethodInfo mi = typeof(string).GetMethod("Split", new[] { typeof(char[]) });
MethodCallExpression splitExpression =
Expression.Call(exDateProperty, mi, Expression.Constant(new[] { '|' }));
MethodInfo containsMethod = typeof(ICollection<string>).GetMethod("Contains");
var expression = Expression.Call(param, containsMethod, splitExpression, stringProperty);
【问题讨论】:
-
.FirstOrDefault(p => p.Contains("part3")); -
@Rune FS:你为什么改标题?我对获取 linq 查询不感兴趣。这很简单。我真的需要 linq 表达式语句。
-
什么是“linq 表达式语句”? :|
-
这不是您要查找的表达式树。表达式树是语句的计算表示。即当你使用代码动态构建代码时
-
我指的是可以用作 linq 提供程序的表达式树。见msdn.microsoft.com/en-us/library/vstudio/bb397951.aspx
标签: c# linq expression-trees