2012-08-04 41 views
1

我有它的返回类型为转换IEnumerable的到System.Data.Linq.Table

此代码不能正常工作的功能。我只是想返回了IEnumerable作为Linq.Table **

public static System.Data.Linq.Table<Products> GetProducts() 
    { 
     MyContext mc = new MyContext(); 

     Table<Products> ret = null; 
     // Or Table<Products> ret = mc.GetTable<Products>(); 

     ret.AttachAll<Products>(mc.GetTable<Products>() 
            .OrderBy(p => p.ProductID).Take(1)); 

     return ret; 
    } 

现在我想的IEnumerable查询转换为System.Data.Linq.Table。

(你可能会说,我可以改变返回类型,但问题是,这是否是可能的。我可以覆盖像GetTable()?某些功能)

回答

1

你不能。 Table<TEntity> class为了提供IQueryable<T> interface实现而存在。在那里没有任何实际的项目,它只是DataContext class公开的一个根,以提供一个IQueryable<T>实现,该实现被解释,转换为SQL然后发送到SQL服务器。

如果你有一个IEnumerable<T> interface的实现,你很可能已经有你正在迭代的物化结果集(或者内存中的集合)。执行IQueryable<T>没有任何好处,因为没有什么可以解释的;你想要的一切已经在内存中。

也就是说,最好只使用IEnumerable<T>实现中的常规扩展方法/查询语法,而不是试图将其放入Table<TEntity>

相关问题