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

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

Patricia Arquette
发布: 2024-11-02 04:00:30
原创
941 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板