2

LINQ で 2 つのデータテーブル間で右結合を行っています。orderby 行で「指定されたキャストが無効です」というエラーが表示されます。

"SomeOtherID" 列は、dbml の System.Int64 型であり、DBNull を許可します。列のデータに null 値が含まれていますが、これは有効です。これらの null は、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
                                     {
                                         ......
                                     });
4

1 に答える 1

3

また、チェックしてください:LINQ:TypedDataSetsのnull許容列を持つOrderBy

下の方法で試してください

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
       {
           ......
       });
于 2012-06-04T18:04:45.730 に答える