【问题标题】:converting LINQ query result to int将 LINQ 查询结果转换为 int
【发布时间】:2012-07-05 12:53:28
【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

  • 您正在选择一个 routeLinq 对象...而不是选择与您感兴趣的 int 值对应的属性

标签: c# linq type-conversion


【解决方案1】:

那是因为res.FirstOrDefault()返回一个RouteLinqs类型的对象,因为你使用的是select p,你可以使用select p.FieldName选择一个字段,其中FieldName是你需要转换的属性,大概是@987654325 @

您可能想要查询 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);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这段代码应该可以工作:

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

      【讨论】:

        【解决方案4】:

        不确定您的情况,但 RouteLinqs 已定义,但您可能希望从 RouteLinqs 类中选择特定对象。

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

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

        【讨论】:

          【解决方案5】:

          首先制作 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();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多