我正在使用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