Home Articles

将LINQ查询结果转换为int

Asked
Viewed 1508 times
1

我've written a LINQ query that should return an int value. but I' m无法将此值转换为int并发生异常: Unable to cast object of type 'QuickRoutes.DAL.RouteLinq' to type '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 Answers

  • 9

    先做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();
    
  • 3

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

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

    这段代码应该有效:

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

    不确定你是怎么回事,但定义了 RouteLinqs ,但也许你正在寻找从类 RouteLinqs 中选择一个特定的对象 .

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

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

  • 0

    这是因为 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);
    

Related