小弟初学Entity Framework。现在有几个基本的问题搞不定,所以来CSDN请教各位高手。具体情况是这样。小弟本地SQL SERVER服务器上有一个自己建的SQL SERVER数据库。SQL语句很简单,就是:CREATE DATABASE myDB;
之后在myDB数据库中建了一张表:USE [myDB]
GO/****** Object:  Table [dbo].[myTable]    Script Date: 05/18/2009 17:29:39 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOCREATE TABLE [dbo].[myTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[myValue] [int] NOT NULL,
 CONSTRAINT [PK_myTable] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]GO
之后小弟建了一个Entity FrameWork类,其中包括表myTable。之后小弟有这么一个页面:<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Label ID="lbl" runat="server"></asp:Label><br />
        <asp:GridView ID="GridView1" runat="server"></asp:GridView>
    </form>
</body>
</html>
后台这样写:    protected void Page_Load(object sender, EventArgs e)
    {
        using (myDBEntities db = new myDBEntities())
        {
            string Ssql = "SELECT VALUE c FROM myTable AS c ";
            var query = db.CreateQuery<myTable>(Ssql);            GridView1.DataSource = query;
            GridView1.DataBind();
        }
    }
这样GridView可以正确绑定结果。现在的问题是这样:
1、如果仅需要查询部分字段,那么这个查询语句应该怎样写?小弟这么做了一个尝试:    protected void Page_Load(object sender, EventArgs e)
    {
        using (myDBEntities db = new myDBEntities())
        {
            string Ssql = "SELECT VALUE row(c.Id, C.myValue) FROM myTable AS c ";
            var query = db.CreateQuery<myTable>(Ssql);            GridView1.DataSource = query;
            GridView1.DataBind();
        }
    }但是报错:The specified cast from a materialized 'System.Data.Objects.MaterializedDataRecord' type to the 'myDBModel.myTable' type is not valid. 是不是说只查询部分字段不能直接使用GridView进行绑定?还是有什么其他原因?小弟不知道应该怎么进行,希望诸位高手帮忙;
2、类似问题1,如果小弟这样写后台代码:    protected void Page_Load(object sender, EventArgs e)
    {
        StringBuilder myBuilder = new StringBuilder();        using (myDBEntities db = new myDBEntities())
        {
            string Ssql = "SELECT VALUE row(c.Id, C.myValue) FROM myTable AS c ";
            var query = db.CreateQuery<myTable>(Ssql);            foreach (myTable t in query)
            {
                myBuilder.Append(t.myValue.ToString() + ",");
            }            Response.Write(myBuilder.ToString());
        }
    }请问小弟应该如何遍历查询结果?提前谢过各位高手!

解决方案 »

  1.   


    protected void Page_Load(object sender, EventArgs e)
        {
            using (myDBEntities db = new myDBEntities())
            {
                string Ssql = "SELECT c.Id,c.myValue FROM myTable AS c ";
                var query = db.CreateQuery<myTable>(Ssql);            GridView1.DataSource = query;
                GridView1.DataBind();
            }
        }
      

  2.   


    protected void Page_Load(object sender, EventArgs e)
        {
            using (myDBEntities db = new myDBEntities())
            {
                string Ssql = "SELECT c.Id,c.myValue FROM myTable AS c ";
                var query = db.CreateQuery<myTable>(Ssql);            GridView1.DataSource = query;
                GridView1.DataBind();
            }
        }
      

  3.   


    protected void Page_Load(object sender, EventArgs e)
        {
            StringBuilder myBuilder = new StringBuilder();        using (myDBEntities db = new myDBEntities())
            {
                string Ssql = "SELECT c.Id,c.myValue FROM myTable AS c";
                var query = db.CreateQuery<myTable>(Ssql);            foreach (var r in query)
                {
                    myBuilder.Append(r.myValue.ToString() + ",");
                }            Response.Write(myBuilder.ToString());
            }
        }
      

  4.   

    致Sandy945:
    小弟把您的3层楼上的代码都粘到我自己的程序里执行了一下,全都报错。而且错误都是:“The specified cast from a materialized 'System.Data.Objects.MaterializedDataRecord' type to the 'myDBModel.myTable' type is not valid.”不知道是不是小弟少引用了什么?还是有什么其他原因?
      

  5.   

    是运行时错误,还是编译错误。
    我机器没有数据库,测试不了。你试下这个using System.Data.EntityClient;
    using System.Data.Objects;
    using System.Data.Common;        EntityConnection ec = new EntityConnection("XXX");//xxx的位置为连接字符串
            ObjectContext context = new ObjectContext(ec);        ObjectQuery<DbDataRecord> queryTab = context.CreateQuery<DbDataRecord>("SELECT c.Id,c.myValue FROM myTable AS c ");        foreach (var r in queryTab)
            {
                Response.Write(string.Format("{0},{1}", r[0].ToString(), r[1].ToString()));
            }
      

  6.   

    看看 你griedview自动生成的绑定字段 
    你的后太查出来的标示 变了他也要变  不然识别不了
      

  7.   

    针对这个问题我写了个方法
    具体实现你可以去看下
    http://www.cnblogs.com/Ewait/archive/2009/04/03/1428748.html
      

  8.   

        protected void Page_Load(object sender, EventArgs e)
        {
            using (myDBEntities db = new myDBEntities())
            {
                string Ssql = "SELECT VALUE row(c.Id, C.myValue) FROM myTable AS c ";
                var query = db.CreateQuery<myTable>(Ssql);            GridView1.DataSource = query;
                GridView1.DataBind();
            }
        }
    红色部分有问题 应该采用var query = db.CreateQuery<DbDataRecord>(Ssql)
    采用row关键字是生存一个DbDataRecord实例 与myTable继承管理 所以不能转换