我编写了一个应返回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());
我该如何解决这个问题?
答案 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);
在这种情况下,p
是RouteLinqs
的单个项目,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);