使用 Linq to Entities 实现“Contains()”的解决方法
Linq to 本身并不支持“Contains()”方法实体,这在查询中处理 ID 集合时带来了挑战。在这里,我们提出了一个可行的解决方案来解决此限制。
解决方案:
要替换不受支持的“Contains()”方法,我们利用“Any()” ' 方法代替:
var q = from t in svc.OpenTransaction where txnIds.Any<long>(tt => tt == t.OpenTransactionId) select t;
但是,此修改并不能解决 Linq to Entities 上下文中不支持 'Any()' 的问题。为了克服这个问题,我们提供了一种替代方法:
public static IQueryable<TEntity> WhereIn<TEntity, TValue> ( this ObjectQuery<TEntity> query, Expression<Func<TEntity, TValue>> selector, IEnumerable<TValue> collection )
此扩展方法使您能够将过滤器应用于一系列实体类型和属性。
使用示例:
以下代码演示了如何使用 'WhereIn()' 方法:
using (MyObjectContext context = new MyObjectContext()) { //Using method 1 - collection provided as collection var contacts1 = context.Contacts.WhereIn(c => c.Name, GetContactNames()); //Using method 2 - collection provided statically var contacts2 = context.Contacts.WhereIn(c => c.Name, "Contact1", "Contact2", "Contact3", "Contact4" ); }
通过使用此解决方案,您可以在使用时获得 'Contains()' 的功能Linq to Entities,为您的查询提供更大的灵活性。
以上是如何在 Linq to Entities 中实现'Contains()”功能?的详细内容。更多信息请关注PHP中文网其他相关文章!