私は linq 式ツリー ( http://msdn.microsoft.com/en-us/library/vstudio/bb397951.aspx ) を使用して、動的に作成された複雑なカスタム フィルターを作成しています。ここで、テーブルのプロパティではなく、分割されたプロパティのすべての部分を比較する式を作成する必要があります。
対応する static 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」を検索して1行目を取得したいです。
split func<> のラムダ式を作成するには?
更新:これが私がこれまでに得たステータスです(最後の行で行き詰まります)。また、上記の linq ステートメントから ExpressionTreeViewer を使用して式ツリーを構築しようとしましたが、「.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);