Linq to Entities:使用擴充方法取代「Contains()」
不直接支援「Contains()」方法Lq 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>
注意:
在Entity Framework 版本4 及更高版本中,直接支援'Contains()' 方法,無需使用此處介紹了解決方法。
以上是如何在不使用「Contains()」的情況下在 Linq to Entities 中過濾具有 ID 清單的實體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!