LINQ 的 orderby 子句中的“指定的强制转换无效”错误

本文关键字:转换 无效 错误 子句 orderby LINQ | 更新日期: 2023-09-27 18:36:22

我正在 LINQ 中的两个数据表之间进行右连接。我在排序行"指定的强制转换无效"处收到错误。

"SomeOtherID"列在 dbml 中属于 System.Int64 类型,允许 DBNull。该列在数据中有一些空值,这是有效的。似乎这些空值必须在 orderby 语句中以某种方式处理,但我不确定如何处理。数据是通过 Web 服务传入的。我检查了 reference.cs 文件,该列的相应属性是一个 int。

LINQ 语句应该如何?

 var query = (from table1 in DataTable1.AsEnumerable()
                          join table2 in DataTable2.AsEnumerable()
                              on (int) table1["CustomerID"] equals (int) table2["CustomerID"] into outer
                          from table2 in outer.DefaultIfEmpty()
                          orderby (int?)table2["SomeOtherID"] 
                          select new
                                     {
                                         ......
                                     });

LINQ 的 orderby 子句中的“指定的强制转换无效”错误

还要检查: LINQ: OrderBy 在 TypedDataSet 中使用可为空的列

尝试以下方式

var query = 
(from table1 in DataTable1.AsEnumerable()
  join table2 in DataTable2.AsEnumerable()
  on (int) table1["CustomerID"] equals (int) table2["CustomerID"] 
   into outer from table2 in outer.DefaultIfEmpty()
//order by clause changed here     
 orderby 
   (Convert.IsDBNull(table2["SomeOtherID"]) ? 0 : (int?)
                          Convert.ToInt32(table2["SomeOtherID"]))
    select new
       {
           ......
       });