如何在linq中仅选择一列以返回对象
本文关键字:一列 对象 返回 linq 选择 | 更新日期: 2023-09-27 17:54:25
我试图只选择CourseId属性,但它给了我一个错误
Course co = db.Courses.Include("Students").Where(c => c.CourseName == "C#")
.Select(cc => new Course() { CourseId = cc.CourseId }).SingleOrDefault();
错误:类型为'System '的异常。在EntityFramework.SqlServer.dll中发生NotSupportedException',但未在用户代码中处理
附加信息:实体或复杂类型'Database1Model '。Course'不能在LINQ to Entities查询中构造。
这个呢
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();
实体框架不允许在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,为什么要包括"学生"?
我只是想得到一个OBJECT类型的课程与他们的学生与只访问一次数据库
如果是这种情况,那么修改雅各布的答案:
更新:var sourceWithStudents = db.Courses
.Include("Students")
.Where(c => c.CourseName == "C#")
.Select(c => new Course() { CourseName = c.CourseName, Students = c.Students} )
.SingleOrDefault();
sourceWithStudents
将包含一个用Students
填充的Course
对象。
这应该能得到你想要的。我怀疑你的模式。如果您确实只需要名称和学生,那么您应该选择一个只包含这两个内容的Course类。