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 に答える