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

本文关键字:Data Linq Table System IEnumerable 转换 | 更新日期: 2024-10-24 13:50:49

我有一个函数,其返回类型为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()之类的函数吗?)

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

你不能。Table<TEntity>类的存在是为了提供IQueryable<T>接口实现。其中没有任何实际的项,它只是DataContext类公开的根,以便提供IQueryable<T>实现,该实现被解释、翻译为SQL,然后发送到SQL服务器。

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

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