C# &引用;指定的强制转换无效";LINQ'中的错误;s orderby子句

C# &引用;指定的强制转换无效";LINQ'中的错误;s orderby子句,c#,.net,linq,datatable,nullable,C#,.net,Linq,Datatable,Nullable,我正在LINQ中的两个数据表之间进行正确的连接。我在orderby行“指定的强制转换无效”处遇到错误 “其他人“列在dbml中的类型为System.Int64,并允许DBNull。该列在数据中有一些空值,这是有效的。似乎在orderby语句中必须以某种方式处理这些空值,但我不确定如何处理。数据是通过web服务传入的。我检查了reference.cs文件,该列的相应属性是int LINQ语句应该是怎样的 var query = (from table1 in DataTable1.AsEnume

我正在LINQ中的两个数据表之间进行正确的连接。我在orderby行“指定的强制转换无效”处遇到错误

“其他人“列在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
                                     {
                                         ......
                                     });
同时检查:

试试下面的方法

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
       {
           ......
       });

解决方案对您有效吗???重新标记-我假设这是LINQ到SQL,而不是LINQ到实体。无论哪种方式,它都不在内存中LINQ。回滚,这不是LINQ到SQL或LINQ到实体。这是LINQ到DataTables。@Danny我使用了通用LINQ标记,它包含任何类型的LINQ。我不明白你想干什么!数据表在内存中。@Tony_Henrich我错了,从原始标记(和)看不清楚。