首页  >  文章  >  后端开发  >  如何使用 Contains() 和 Linq to Entities 高效查询数据?

如何使用 Contains() 和 Linq to Entities 高效查询数据?

Barbara Streisand
Barbara Streisand原创
2024-10-29 07:12:03640浏览

How Do I Query for Data Efficiently Using Contains() with Linq to Entities?

使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn