3

我编写了一个应该返回一个 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());

我怎么解决这个问题?

4

5 回答 5

10

那是因为res.FirstOrDefault()返回一个RouteLinqs类型对象,因为你正在使用select p,你可以选择一个字段 using 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);
于 2012-07-05T06:34:21.863 回答
3

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

route.Id = aspdb.RouteLinqs.Max(x => x.RouteId);
于 2012-07-05T06:44:07.517 回答
2

此代码应该可以工作:

route.Id = Convert.ToInt32((res.FirstOrDefault()).FieldName); 
于 2012-07-05T06:42:13.790 回答
1

不确定您是如何RouteLinqs定义的,但也许您正在寻找从 class 中选择特定对象RouteLinqs

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

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

于 2012-07-05T06:36:52.723 回答
0

首先制作 linq :

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

比运行:

 int result = query.FirstOrDefault();

在 1 个命令中:

int result = (from p in aspdb.RouteLinqs
                           orderby p.RouteId descending
                           select p.Id).FirstOrDefault();
于 2018-04-05T12:26:24.070 回答