使用 Linq to Entities 通过 Contains() 高效查询数据
数据访问中的一个常见要求是根据以下列表进行过滤价值观。许多编程语言中都提供了“Contains()”方法,可以简化此任务。然而,与 Microsoft 实体框架一起使用的 Linq to Entities 直到最近才缺少此功能。
使用“Any()”创建解决方法
最初,尝试是使用“Any()”方法作为解决方法:
var q = from t in svc.OpenTransaction where txnIds.Any<long>(tt => tt == t.OpenTransactionId) select t;
但是,由于不支持“Any”方法,此方法遇到错误。
支持 '实体框架 4 及以上版本中的 Contains()'
幸运的是,从 Entity Framework 4 开始,原生支持“Contains()”方法。这意味着可以使用以下代码根据值列表进行过滤:
var q = from t in svc.OpenTransaction where txnIds.Contains(t.OpenTransactionId) select t;
对低于 4 的 EF 版本使用自定义扩展方法
For在 4 之前的 EF 版本中,可以实现自定义扩展方法来为“Contains()”提供解决方法:
public static IQueryable<TEntity> WhereIn<TEntity, TValue> ( this ObjectQuery<TEntity> query, Expression<Func<TEntity, TValue>> selector, IEnumerable<TValue> collection ) { // ... Implementation goes here }
自定义扩展方法的使用
要使用扩展方法,请传入选择器表达式和要过滤的值列表:
var contacts = context.Contacts.WhereIn(c => c.Name, GetContactNames());
通过此解决方法,您可以使用 Contains() 有效过滤 Linq to Entities 查询中的数据。
以上是如何使用 Contains() 和 Linq to Entities 高效查询数据?的详细内容。更多信息请关注PHP中文网其他相关文章!