LINQ错误:实体类型的显式构造
我在GridView1.DataBind()上遇到此错误 不允许在查询中显式构造实体类型“WebApplication1.MUser”。LINQ错误:实体类型的显式构造,linq,Linq,我在GridView1.DataBind()上遇到此错误 不允许在查询中显式构造实体类型“WebApplication1.MUser”。 using (var db = new UsersDataContext()) { IEnumerable<MUser> user = from u in db.MUsers where u.Id == 1
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%不可用。这些匿名函数的用途非常有限,因此不应直接从查询返回。