Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ错误:实体类型的显式构造_Linq - Fatal编程技术网

LINQ错误:实体类型的显式构造

LINQ错误:实体类型的显式构造,linq,Linq,我在GridView1.DataBind()上遇到此错误 不允许在查询中显式构造实体类型“WebApplication1.MUser”。 using (var db = new UsersDataContext()) { IEnumerable<MUser> user = from u in db.MUsers where u.Id == 1

我在GridView1.DataBind()上遇到此错误

不允许在查询中显式构造实体类型“WebApplication1.MUser”。

 using (var db = new UsersDataContext())
            {
                IEnumerable<MUser> user = from u in db.MUsers
                                          where u.Id == 1
                                          select new MUser {Username = u.Username, Id = u.Id, Password=u.Password, ProjectUsers=u.ProjectUsers };

                GridView1.DataSource = user;

                GridView1.DataBind();

            }
使用(var db=new UsersDataContext())
{
IEnumerable user=从u开始,单位为db.MUsers
其中u.Id==1
选择新MUser{Username=u.Username,Id=u.Id,Password=u.Password,ProjectUsers=u.ProjectUsers};
GridView1.DataSource=用户;
GridView1.DataBind();
}
如何解决这个问题

我遵循这个教程

如果要返回完整的缪斯对象,只需使用:

using (var db = new UsersDataContext())
        {
            IEnumerable<MUser> user = from u in db.MUsers
                                      where u.Id == 1
                                      select u;

            GridView1.DataSource = user;

            GridView1.DataBind();

        }
使用(var db=new UsersDataContext())
{
IEnumerable user=从u开始,单位为db.MUsers
其中u.Id==1
选择u;
GridView1.DataSource=用户;
GridView1.DataBind();
}
或者,如果您想返回用户的自定义部分(即仅来自Muser对象的某些属性),您可以使用匿名类型,如下所示。

using (var db = new UsersDataContext())
        {
            IEnumerable<MUser> user = from u in db.MUsers
                                      where u.Id == 1
                                      select new  {Username = u.Username, Id = u.Id, Password=u.Password, ProjectUsers=u.ProjectUsers };

            GridView1.DataSource = user;

            GridView1.DataBind();

        }
使用(var db=new UsersDataContext())
{
IEnumerable user=从u开始,单位为db.MUsers
其中u.Id==1
选择新建{Username=u.Username,Id=u.Id,Password=u.Password,ProjectUsers=u.ProjectUsers};
GridView1.DataSource=用户;
GridView1.DataBind();
}

但匿名类型无法在WCF中序列化

不能在查询中构造实体类型。微软认为开发人员太笨了,会把自己搞糊涂(除其他外)。快速、简单且效率低下的修复

using (var db = new UsersDataContext())
        {
            IEnumerable<MUser> user = from u in db.MUsers.AsEnumerable()
                                      where u.Id == 1
                                      select new MUser {Username = u.Username, Id = u.Id, Password=u.Password, ProjectUsers=u.ProjectUsers };

            GridView1.DataSource = user;

            GridView1.DataBind();

        }
使用(var db=new UsersDataContext())
{
IEnumerable user=在db.MUsers.AsEnumerable()中从u开始
其中u.Id==1
选择新MUser{Username=u.Username,Id=u.Id,Password=u.Password,ProjectUsers=u.ProjectUsers};
GridView1.DataSource=用户;
GridView1.DataBind();
}

我不建议将其用于产品环境,因为它将加载整个表,但我已将其用于个人使用的内部应用程序。我建议创建一个重载模型。

如果您关心性能,应该将查询更改为:

 using (var db = new UsersDataContext())
      {
      IEnumerable<MUser> user = from x in
                                  (from u in db.MUsers
                                   where u.Id == 1
                                   select u).AsEnumerable()
                                select new MUser { Username = x.Username, Id = x.Id, Password = x.Password, ProjectUsers = x.ProjectUsers };

      GridView1.DataSource = user;
      GridView1.DataBind();
      }
使用(var db=new UsersDataContext())
{
IEnumerable user=从x开始
(来自u,单位为db.MUsers)
其中u.Id==1
选择u.AsEnumerable()
选择新MUser{Username=x.Username,Id=x.Id,Password=x.Password,ProjectUsers=x.ProjectUsers};
GridView1.DataSource=用户;
GridView1.DataBind();
}

MUser的代码是什么样子的?第二个示例不起作用。编译器将抱怨无法将匿名类型强制转换为MUser类型。请记住,匿名类型在其原始小上下文之外100%不可用。这些匿名函数的用途非常有限,因此不应直接从查询返回。