17

我正在尝试使用 Linq to Entities 查询数据库上下文,但出现此错误:

LINQ to Entities 无法识别方法“Int32 Int32(System.String)”方法,并且该方法无法转换为存储表达式。

代码:

public IEnumerable<CourseNames> GetCourseName()
{
   var course = from o in entities.UniversityCourses
                select new CourseNames
                {
                    CourseID = Convert.ToInt32(o.CourseID),
                    CourseName = o.CourseName,
                 };
   return course.ToList();
}

看到这个后我就这样尝试

public IEnumerable<CourseNames> GetCourseName()
{
    var temp = Convert.ToInt32(o.CourseID);
    var course = from o in entities.UniversityCourses
                 select new CourseNames
                 {
                     CourseID = temp,
                     CourseName = o.CourseName,
                 };
    return course.ToList();
}

但它会抛出一个错误:

“当前上下文中不存在名称‘o’”

这是我的课程代码GetCourseName

namespace IronwoodWeb
{
    public class CourseNames
    {
        public int CourseID { get; set; }
        public string CourseName { get; set; }
    }
}
4

4 回答 4

39
public IEnumerable<CourseNames> GetCourseName()
{
    var courses = from o in entities.UniversityCourses
                  select new { o.CourseID, o.CourseName };

    return courses.ToList() // now we have in-memory query
                  .Select(c => new CourseNames()
                  {
                     CourseID = Convert.ToInt32(c.CourseID), // OK
                     CourseName = c.CourseName
                  });
}
于 2012-12-14T23:03:02.377 回答
4

如果您不想具体化查询(检索数据),您可以使用强制转换(即(int)o.CourseId)。被转换为 SQL CAST AS 语句。

于 2015-06-24T09:34:20.020 回答
3

您还可以将值作为字符串返回(因为它显然是存储的),然后在之后转换它。

'o' 脱离上下文的错误是您仅在 Linq 查询中声明 o 并且只能在该范围内引用。

于 2012-12-14T23:06:28.207 回答
-4

显式转换简单且有效: (int)o.CourseID

var course = from o in entities.UniversityCourses
                select new CourseNames
                {
                    CourseID = (int)o.CourseID,
                    CourseName = o.CourseName,
                 };
于 2015-09-16T15:25:44.480 回答