2010-05-05 2 views
3

샘플 동영상 (MVC) 응용 프로그램을 만드는 중입니다. 내가보기에 좋은 얻고 새 레코드를 생성하지만, 나는 다음과 같은 오류를 만나 특정 레코드의 세부 사항 얻을 수있는 코드를 쓴했다 : 여기람다 식 작성시 MVC Proj 오류 발생

Unable to cast objec`t of type 'System.Data.Objects.ObjectQuery`1[MovieApp.Models.Movie]' to type 'MovieApp.Model`s.Movie'. 

을 나는 세부 사항을 얻기를 위해 쓴 코드는

public ActionResult Details(int id) 
{ 
    var moviedetail = (Movie)_entities.MovieSet.Where(mvid => mvid.Id == id); 
return View(moviedetail); 
} 

어떤 몸이라도 나에게 무슨 일이 잘못되는지 알려줄 수 있습니까?

감사합니다.

+0

는 단순히 끝에 좁은 방() ... –

답변

1

코드의 문제는 Where 함수가 IEnumerable을 반환하고 Movie로 타입 캐스팅하는 것입니다. 그러므로 그것은 실패하고있다. 확장 기능이 자신을 위해 표시되는 구문을 확인하십시오. 따라서 하나의 Movie 객체 만 반환된다고 확신하는 경우 First()를 사용하는 것이 좋습니다.

public ActionResult Details(int id) 
{ 
    var moviedetail = _entities.MovieSet.Where(mvid => mvid.Id == id).First(); 
    return View(moviedetail); 
} 
당신이 경우에 그런 당신이 ToList 할 때까지 실행되지 않습니다 쿼리() 또는 뭔가를 반환
+0

100 % 완벽한 답변! 감사합니다. 친구 야, 정확히 무슨 일이 일어난 건지 ... 그리고 내가 말했듯이 지금은 내 코드가 원활하게 돌아가고 있습니다. 답을 고맙게 생각합니다 !! 돌보기 – Shrewdroid

1

First를 사용 var moviedetail = (Movie)_entities.MovieSet.FirstOrDefault(mvid => mvid.Id == id);

Where이 목록을 반환 ToList()를 추가하는 데 사용됩니다 당신은 하나의 확인이 귀하의 경우 귀하의 ID와 일치하는 모든 항목을해야 할, 그것은 반환 일치하는 첫 번째 항목 인 FirstOrDefault은 일치하는 첫 번째 항목 또는 일치하지 않는 항목 (아마도 null)을 반환합니다.

+2

또는 싱글 (...)를 추가 할 수 있습니다 하나만있을 것임을 알아야합니다. –

+0

안녕하세요, 도와 주셔서 감사합니다.하지만 이미 위에서 언급 한 솔루션을 시도했으며이 메시지가 나타났습니다. ('단일'메서드는 LINQ에 대한 LINQ에서 지원되지 않습니다. 대신 'First'메서드 사용) 그리고 그 이유는 내가 WHERE 속성을 사용했다 어떤 단서 ??? – Shrewdroid

0

나는 당신이 람다 식에서 컬렉션을 얻고 있다고 생각한다. 그리고 당신의 견해는 하나의 영화 작품을 기대하고 있습니다. 불일치가 있기 때문에 오류가 발생합니다. Where() 대신 Single()을 사용하거나 First()를 사용하십시오.

var moviedetail = (영화) _entities.MovieSet.Single (mvid => mvid.Id == id);

+0

안녕하세요, 답장을 보내 주셔서 감사합니다.하지만 첫 번째 또는 단일 속성은 첫 번째 또는 기본 단일 개체를 반환합니다. 어디서 id와 일치하는 객체를 원하는지 where 절 ... 내가 시도 할 수있는 다른 단서 ?? 감사합니다 – Shrewdroid