我有一个返回类型为表
的函数此代码不起作用。我只想将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()这样的函数吗?)
答案 0 :(得分:1)
你做不到。存在Table<TEntity>
class以提供IQueryable<T>
interface实施。那里没有任何实际的项,它只是DataContext
class公开的根,以便提供一个IQueryable<T>
实现,该实现被解释,转换为SQL,然后发送到SQL服务器。
如果你有IEnumerable<T>
interface实现,很可能已经你正在迭代的具体化结果集(或内存中的集合)。实施IQueryable<T>
没有任何好处,因为没有什么可以解释的;你想要的一切都在记忆中。
也就是说,在IEnumerable<T>
实施中使用常规扩展方法/查询语法可能比尝试将其放在Table<TEntity>
中更好。