iqeryable被Linq忽略在自定义集合上

时间:2015-03-18 03:18:24

标签: c# linq

我试图覆盖自定义where子句的行为来查看索引。

所以我有一个自定义集合,其中包含自定义where方法。

片断..

public IndexedDbSet<T> : IdbSet<T>   // IdbSet<T> :  IQueryable<T>
{

  public IEnumerable<T> Where ( Expression<Func<T,bool>> predicate) `
  {
  }
}

我称之为var blastNum = collection.Where( x => x.SiteId ==siteId).ToList();

然而,当我在集合上运行where时,它会调用corelib中的扩展方法。

我也尝试过返回IQueryable ..

预计会出现这种情况吗?还有更好的方法吗?

注意我有一个现有的代码库,可以为数据库执行大量的LINQ,但是我需要它去内存和1M +记录暴力需要太长时间。 它是一个Windows应用商店应用。

注意与接口上的优先顺序不一样,因为我直接调用它而不是接口,它的LINQ可能会改变行为。

1 个答案:

答案 0 :(得分:-1)

根据您提供的详细信息,我认为您所在的课程位于&#39; Where&#39;方法有&#39; System.Linq&#39;使用中的命名空间。因此,它调用了“&#39; Where&#39; .NET Framework中的方法,而不是来自您的类。

如果您不需要System.Linq命名空间,请将其删除以解决问题或更改您的&#39; Where&#39; static的方法和接受对象作为参数之一如下,并在该对象上应用您的谓词

public static IEnumerable<T> Where ( customCollection instance, Expression<Func<T,bool>> predicate)