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