首页  >  文章  >  后端开发  >  如何在不使用“Contains()”的情况下在 Linq to Entities 中过滤具有 ID 列表的实体?

如何在不使用“Contains()”的情况下在 Linq to Entities 中过滤具有 ID 列表的实体?

Patricia Arquette
Patricia Arquette原创
2024-11-02 04:00:30841浏览

How to Filter Entities with a List of IDs in Linq to Entities without 'Contains()'?

Linq to Entities:使用扩展方法替代“Contains()”

不直接支持“Contains()”方法Linq to Entities,在根据 ID 列表过滤实体时提出了挑战。为了解决此限制,可以采用使用扩展方法的替代方法。

解决方案:

“WhereIn()”扩展方法为“Contains”提供了解决方法()”通过将比较转换为一系列“Equals()”表达式。这个扩展方法可以实现如下:

<code class="csharp">public static IQueryable<TEntity> WhereIn<TEntity, TValue>
(
    this ObjectQuery<TEntity> query,
    Expression<Func<TEntity, TValue>> selector,
    IEnumerable<TValue> collection
)
{
    // ... implementation details omitted ...
}</code>

用法:

'WhereIn()'方法可用于根据集合过滤实体ID:

<code class="csharp">List<long?> txnIds = new List<long?>();
// Fill txnIds

var q = from t in svc.OpenTransaction
        where txnIds.WhereIn(t => t.OpenTransactionId)
        select t;</code>

或者,如果 ID 集合是静态的,则可以直接将其提供给扩展方法:

<code class="csharp">var q = context.Contacts.WhereIn(c => c.Name,
      "Contact1",
      "Contact2",
      "Contact3",
      "Contact4"
      );</code>

注意:

在实体框架版本 4 及更高版本中,直接支持“Contains()”方法,无需使用此处介绍的解决方法。

以上是如何在不使用“Contains()”的情况下在 Linq to Entities 中过滤具有 ID 列表的实体?的详细内容。更多信息请关注PHP中文网其他相关文章!

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