使用Linq to Entities的“ Contains()”解决方法?

使用Linq to Entities的“ Contains()”解决方法?,第1张

使用Linq to Entities的“ Contains()”解决方法?

更新: EF≥4

Contains
直接支持(Checkout
Any
),因此您不需要任何解决方法。

public static IQueryable<TEntity> WhereIn<TEntity, TValue>  (    this ObjectQuery<TEntity> query,    expression<Func<TEntity, TValue>> selector,    IEnumerable<TValue> collection  ){  if (selector == null) throw new ArgumentNullException("selector");  if (collection == null) throw new ArgumentNullException("collection");  if (!collection.Any())     return query.Where(t => false);  Parameterexpression p = selector.Parameters.Single();  IEnumerable<expression> equals = collection.Select(value =>     (expression)expression.Equal(selector.Body,          expression.Constant(value, typeof(TValue))));  expression body = equals.Aggregate((accumulate, equal) =>      expression.Or(accumulate, equal));  return query.Where(expression.Lambda<Func<TEntity, bool>>(body, p));}//Optional - to allow static collection:public static IQueryable<TEntity> WhereIn<TEntity, TValue>  (    this ObjectQuery<TEntity> query,    expression<Func<TEntity, TValue>> selector,    params TValue[] collection  ){  return WhereIn(query, selector, (IEnumerable<TValue>)collection);}

用法

public static void Main(){  using (MyObjectContext context = new MyObjectContext())  {    //Using method 1 - collection provided as collection    var contacts1 =      context.Contacts.WhereIn(c => c.Name, GetContactNames());    //Using method 2 - collection provided statically    var contacts2 = context.Contacts.WhereIn(c => c.Name,      "Contact1",      "Contact2",      "Contact3",      "Contact4"      );  }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5602329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存