首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityDataReader to ToList()

EntityDataReader to ToList()
EN

Stack Overflow用户
提问于 2011-09-01 12:57:43
回答 1查看 2.9K关注 0票数 1

我的代码:

代码语言:javascript
复制
public List<Book> GetBook(string Field, object Value)
{
    using (EntityConnection conn = new EntityConnection("name=Entities"))
    {
        conn.Open();

        // Create an EntityCommand.
        using (EntityCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = "Select VALUE b FROM Entities.Book as b where  Cast(b." + Field + " as  Edm.String) like '%" + Value.ToString() + "%'";
            // Execute the command.
            using (EntityDataReader rdr =
                cmd.ExecuteReader(CommandBehavior.SequentialAccess))
            {
                conn.Close();
                var s = from d in rdr.OfType<Book>().AsEnumerable()
                        select d;
                return (s.ToList());
            }
        }
    }
    return (null);
}

为什么结果总是空的?

正确的代码是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-01 15:27:06

为什么在开始从阅读器读取之前关闭连接?Reader就像游标-当你打开它时,它不会把所有的结果都缓冲到内存中,但它会以增量的方式加载它们,这样你就可以在读取任何结果之前轻松地终止连接(以及读取功能)。您不必显式关闭连接-这是using块的职责。

您还可以使用SQL事件探查器来验证它是否真的构建了您期望的查询。

代码语言:javascript
复制
using (EntityConnection conn = new EntityConnection("name=Entities"))
{
    conn.Open();

    // Create an EntityCommand.
    using (EntityCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "Select VALUE b FROM Entities.Book as b where  Cast(b." + Field + " as  Edm.String) like '%" + Value.ToString() + "%'";
        // Execute the command.
        using (EntityDataReader rdr =
            cmd.ExecuteReader(CommandBehavior.SequentialAccess))
        {
            var s = from d in rdr.OfType<Book>().AsEnumerable()
                    select d;
            return (s.ToList());
        }
    }
}

因为rdr.OfType<Book>总是空集合,所以s.ToList().Count返回0。EntitDataReader并不物化实体--它只是数据库相关DataReader的包装器,它的工作方式与此相同。您必须读取列并将它们填充到实体的属性中。

如果你不想这样做,你可以使用objectContext.Translate方法,但是一旦你开始使用ObjectContext,你就完全不需要EntityCommandEntityDataReader了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7266271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档