我正在使用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”并获取第一行。
如何为分割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”));' – Sam
@Rune FS:你为什么改变标题?我不感兴趣得到linq查询。这很简单。我需要真正的linq表达式语句。 – StefanG
什么是“linq表达式语句”? :| – BartoszKP