LINQ to Entities 查询中无法构造实体或复杂类型
初学asp.net 代码出现LINQ to Entities 查询中无法构造实体或复杂类型提示,看了论坛里已有的类似问题,好像是说类型太多,但我这里非常简单,不知道为什么也出这个问题,求解!谢谢!public IList<School> All()
{
var query = from c in OD.Schools
select new School
{
ID = c.ID,
FName = c.FName,
SName = c.SName
};
return query.ToList();
}
ToList直接跟在linq里也出同样的错.同cs下的其他不select nwe school的就没事.如下
public IList<School> GetSchoolByBelongTo(int belongTo)
{
var query = from c in OD.Schools
where c.BelongTo == belongTo
select c;
return query.ToList();
} --------------------编程问答-------------------- 在 LINQ to Entities 查询中无法构造实体或复杂类型“OeicDmp.Models.School" --------------------编程问答-------------------- 重新定义一个Model类,名字叫MSchool
不要使用映射的实体作为返回值类型
public class MSchool
{
..//字段
}
public IList<MSchool> All()
{
var query = from c in OD.Schools
select new MSchool
{
ID = c.ID,
FName = c.FName,
SName = c.SName
};
return query.ToList();
}
--------------------编程问答-------------------- 请问Mschool定义在哪里,如何定义?
School是在OeicDmp.Models项目下,Mschool是否也可以同一位置.还有定义方法,初学,见谅!
namespace OeicDmp.Models
{
//学校对象
public class School
{
[ScaffoldColumn(false)]
public int ID { get; set; }
[DisplayName("上级部门")]
[ScaffoldColumn(false)]
public int BelongTo { get; set; }
[DisplayName("学校全称")]
public string FName { get; set; }
[DisplayName("学校简称")]
public string SName { get; set; }
public virtual ICollection<User> Users { get; set; }
}
}
--------------------编程问答-------------------- 我的public IList<School> All()是在SchoolService.cs里,在SchoolManager.cs里还有一个
SchoolService ls = new SchoolService();
public IList<School> All()
{
return ls.All();
}
控制器先是调用SchoolManager的,学别人的框架写的,也不懂有什么用(估计安全点)
是否在SchoolManager里也要改成MSchool --------------------编程问答-------------------- 查询 部分字段,你可以试着 分几步
--------------------编程问答-------------------- 直接这么写?Tolist().Select不行啊,红线的 --------------------编程问答-------------------- data.ToList().Select(s => new stu { id = s.id, sname = s.sname }).ToList(); --------------------编程问答--------------------
public IList<School> All()
{
var query = from c in OD.Schools
select new //先匿名
{
ID = c.ID,
FName = c.FName,
SName = c.SName
};
return query.ToList() //toList,先查询出部分字段,再转换
.Select(c=>new School{
ID = c.ID,
FName = c.FName,
SName = c.SName
});
}
你这是要搞死人家啊? --------------------编程问答-------------------- 这个问题还真是有点。。。。。 --------------------编程问答-------------------- 可不可以贴出School实体类来呢。。。 --------------------编程问答-------------------- 下午ef6源码,我测试已经通过
在文件ExpressionConverter的
private void CheckInitializerType(Type type)
把
if (BuiltInTypeKind.EntityType == typeKind
||
BuiltInTypeKind.ComplexType == typeKind)
改成
if (BuiltInTypeKind.ComplexType == typeKind) --------------------编程问答--------------------
可以在同一位置定义 --------------------编程问答-------------------- 估计是木有数据的问题
补充:.NET技术 , LINQ