将LINQ查询结果转换为int

时间:2012-07-05 06:33:17

标签: c# linq type-conversion

我编写了一个应返回int值的LINQ查询。但是我无法将此值转换为int并发生异常: 无法将“QuickRoutes.DAL.RouteLinq”类型的对象转换为“System.IConvertible”类型。
这是我的LINQ:

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

并且此处发生异常:

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

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:9)

这是因为res.FirstOrDefault()会返回RouteLinqs类型对象,因为您使用的是select p,您可以使用select p.FieldName选择一个字段,其中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 :(得分:3)

看起来您正在选择最大路线ID,所以为什么不这样做:

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

答案 2 :(得分:2)

此代码应该有效:

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

答案 3 :(得分:1)

不确定你是怎么做的,但是RouteLinqs已经定义,但是你可能想要从班级RouteLinqs中选择一个特定的对象。

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

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

答案 4 :(得分:0)

首先制作linq:

https://{mytenant}.sharepoint.com

比跑:

root

在1命令中:

IQueryable<int> query = (from p in aspdb.RouteLinqs
                           orderby p.RouteId descending
                           select p.Id);