我试图只选择CourseId属性,但它给了我一个错误
Course co = db.Courses.Include("Students").Where(c => c.CourseName == "C#")
.Select(cc => new Course() { CourseId = cc.CourseId }).SingleOrDefault();
错误:
EntityFramework.SqlServer.dll中发生了'System.NotSupportedException'类型的异常,但未在用户代码中处理
附加信息:无法在LINQ to Entities查询中构造实体或复杂类型“Database1Model.Course”。
答案 0 :(得分:2)
实体框架不允许您在LINQ-to-SQL查询中构造实体类型。
您可以在SQL端选择cc.CourseId
,然后在执行SQL查询之后构造Course
实体,如下所示:
var id = db.Courses
.Include("Students")
.Where(c => c.CourseName == "C#")
.Select(cc => cc.CourseId)
.SingleOrDefault();
var course = new Course() { CourseId = id };
顺便说一下,你为什么要包括"学生"如果你只需要课程ID?
答案 1 :(得分:2)
这个怎么样?
var courseAndStudents = db.Courses
.Where(c => c.CourseName == "C#")
.Select(cc => new { cc.CourseId, cc.Students })
.SingleOrDefault();
您只会获得CourseId
和所有Students
。
或者如果您真的不需要Students
,那么只需选择CourseId
var courseId = db.Courses
.Where(c => c.CourseName == "C#")
.Select(cc => cc.CourseId)
.SingleOrDefault();
答案 2 :(得分:1)
我只想和他们的学生一起获得类型课程的对象 只有一次数据库之旅
如果是这样,那么修改Yacoub的回答:
更新:
var sourceWithStudents = db.Courses
.Include("Students")
.Where(c => c.CourseName == "C#")
.Select(c => new Course() { CourseName = c.CourseName, Students = c.Students} )
.SingleOrDefault();
sourceWithStudents
将包含一个填充了Course
的{{1}}个对象。
这应该得到你所追求的。我会质疑你的模型。如果你真的只需要名字和学生,你应该选择一个只包含这两个东西的课程。