2012-07-05 143 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()); 

我怎样才能解决这个问题?

+0

你选择一个routeLinq对象......而不是选择对应于您感兴趣的int值的属性 – NoviceProgrammer

回答

9

那是因为res.FirstOrDefault()返回RouteLinqs类型的对象,因为您正在使用select p,您可以选择使用select p.FieldName,其中字段名是你需要转换的财产,这可能是RouteId

您可能要到现场查询linq查询中的特定字段。

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

或与当前的查询,你可以这样做:

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

不知道你的信息,但RouteLinqs如何定义,但也许你正在寻找从类RouteLinqs选择一个特定的对象。

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

在这种情况下pRouteLinqs和p.SomeProperty一个单一的项目应该是你的int值。

2

此代码应工作:

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

看起来就像你选择最大的路由ID,那么,为什么不只是做:

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