将IEnumerable转换为System.Data.Linq.Table

时间:2012-08-04 13:16:44

标签: c# linq linq-to-sql

我有一个返回类型为

的函数

此代码不起作用。我只想将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 个答案:

答案 0 :(得分:1)

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

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

也就是说,在IEnumerable<T>实施中使用常规扩展方法/查询语法可能比尝试将其放在Table<TEntity>中更好。