To search, for example:
ef.Entities.Where(entity => arr.Contains(entity.Name)).ToArray();
which will contain the trace string:
SELECT .... From Entities ... Where Name In ("abc", "def", "qaz")
I am using the method that I created below:
ef.Entities.Where(ContainsPredicate<Entity, string>(arr, "Name")).ToArray(); public Expression<Func<TEntity, bool>> ContainsPredicate<TEntity, T>(T[] arr, string fieldname) where TEntity : class { ParameterExpression entity = Expression.Parameter(typeof(TEntity), "entity"); MemberExpression member = Expression.Property(entity, fieldname); var containsMethods = typeof(Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public) .Where(m => m.Name == "Contains"); MethodInfo method = null; foreach (var m in containsMethods) { if (m.GetParameters().Count() == 2) { method = m; break; } } method = method.MakeGenericMethod(member.Type); var exprContains = Expression.Call(method, new Expression[] { Expression.Constant(arr), member }); return Expression.Lambda<Func<TEntity, bool>>(exprContains, entity); }
Leng Weh Seng Mar 13 '12 at 4:12 2012-03-13 04:12
source share