【发布时间】:2012-12-02 23:06:57
【问题描述】:
我正在尝试使用 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();
}
看到this之后就这样尝试
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; }
}
}
【问题讨论】:
-
试试
int.Parse(o.CourseID);错误是因为EF不知道如何用SQL编写Convert.ToInt32,但我认为它应该理解int.Parse..(最好是使用适当的列类型并避免必须处理这种转换:) -
@pst using int.parse 抛出相同的错误“当前上下文中不存在名称'o'”并且我不能使用相同的列类型,它也显示错误“不能隐式转换类型.....”无论如何,感谢您尝试帮助我!
-
解决此问题的另一种方法(EF 无法将某些表达式转换为 SQL)是首先运行一个更简单的查询,然后在最后强制它通过 .ToList() 填充。一旦将其放入内存中,您就不必再将表达式转换为 SQL。
-
@user1905332 不,这是一个不同的问题(
o超出范围)。返回 first 查询,但是将Convert.ToInt32替换为int.Parse,嗯nevermind,这是另一种方式。似乎是 IEnumerable 与 IQueryable 的区别? -
@pst 不用担心,lazyberezovsky 发布的答案有效,无论如何感谢您尝试帮助我!
标签: c# linq entity-framework