2012-07-05 4 views
1

int 값을 반환해야하는 LINQ 쿼리를 작성했습니다. 이 값을 int로 변환 할 수없고 예외가 발생했습니다. 'QuickRoutes.DAL.RouteLinq'유형의 객체를 'System.IConvertible'유형으로 캐스팅 할 수 없습니다.
이 내 LINQ입니다 :LINQ 쿼리 결과를 int로 변환

var res = (from p in aspdb.RouteLinqs 
         orderby p.RouteId descending 
         select p).Take(1); 

와 예외가 여기 occures :

route.Id =Convert.ToInt32(res.FirstOrDefault()); 

가 어떻게이 문제를 해결할 수

?

당신이 select p을 사용하고 있기 때문에 res.FirstOrDefault()이하는 RouteLinqs 타입의 객체를 반환하기 때문에입니다
+0

당신이 routeLinq 객체를 선택하는 ... 관심있는 int 값 ur에 해당하는 속성 – NoviceProgrammer

답변

9

, 당신은 필드 이름은 아마 당신은 할 수 있습니다 RouteId

당신이 변환에 필요한 속성을,이다 select p.FieldName를 사용하여 필드를 선택할 수 있습니다 linq 쿼리의 특정 필드를 쿼리하십시오.

var res = (from p in aspdb.RouteLinqs 
         orderby p.RouteId descending 
         select p.RouteId).Take(1); //p.RouteID or any field you want. 

또는 현재 쿼리

, 당신은 할 수 있습니다 : 아마도 당신은 클래스 RouteLinqs에서 특정 개체를 선택 찾고 있습니다

route.Id =Convert.ToInt32(res.FirstOrDefault().RouteID); 
1

당신 되나 RouteLinqs가 정의 방법을 잘하지만,하지 않습니다. 이 경우 p에서

var res = (from p in aspdb.RouteLinqs 
        orderby p.RouteId descending 
        select p.SomeProperty).Take(1); 

는 int 값을해야 RouteLinqs 및 p.SomeProperty의 단일 항목입니다.

2

이 코드는 작동합니다 : 당신이 최대 경로 ID를 선택하는 것처럼

route.Id = Convert.ToInt32((res.FirstOrDefault()).FieldName); 
3

이 같은데, 왜 그냥하지 : 대신 선택

route.Id = aspdb.RouteLinqs.Max(x => x.RouteId);