2

を取得していますが、そのSpecified cast is not valid.理由がわかりません。これが私のコードです。

オブジェクト層。

public class Supervisor
{
    public long ID { get; set; }
    public string stringField1 { get; set; }
    public string stringField2 { get; set; }
    public string stringField3 { get; set; }
    public int intField1{ get; set; }        
    public int intField2 { get; set; }

}

C# メソッド。

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static string GetPend(string value1FromjqGrid, string value2FromjqGrid)
    {
        string query = "GetPend";
        string supervisor = "";
        Supervision _query = new Supervision();             
        DataTable dt = _query.GetSupervisorQuery(value1FromjqGrid, value2FromjqGrid, supervisor, query );
        List<Supervisor> lines = (from dt1 in dt.AsEnumerable()
                               select new Supervisor()
                               { 
                                   ID = dt1.Field<long>("ID"),                                                                              
                                   stringField1 = dt1.Field<string>("Linea"),
                                   intField1 = dt1.Field<int>("Tiempo"),
                                   intField2 = dt1.Field<int>("TIPOACTIVIDAD_ID"),
                                   stringField2 = dt1.Field<string>("ACT_ID"),
                                   stringField3 = dt1.Field<string>("OBS")
                               }).ToList();
        var grid = new
        {
            page = 1,
            records = lines.Count(),
            total = lines.Count(),
            rows = from item in lines
                   select new
                   {
                       id = item.ID,
                       cell = new string[]{                               
                           item.stringField1,
                           item.intField1.ToString(),
                           item.intField2.ToString(),
                           item.stringField2,
                           item.stringField3
                       }
                   }
        };
        return JsonConvert.SerializeObject(grid); 
    }   

それは多かれ少なかれそれです。反復が開始されると、LinQクラッシュします。DataTableチェックしたとおりに正しく入力されておりdt1、フィールドが正しく含まれています。""文字列列の と の数値が表示されますint's(SQL ストアド プロシージャを自分で実行したので、そこでもチェックを行いました)。jqGrid呼び出しの直前にいくつかのアラートを配置しました。はい、問題ありません。

DataTableコードが からへの情報を解析しようとするとエラーが発生するため、関連していると思われるコードを貼り付けました。Listここに含まれる JavaScript を確認する必要がある場合はお知らせください。必要です。明らかに何かが見えないので、正しい方向に導いてくれることを願っています. ありがとう。

PS。LINQPad4 でチェックアウトしようとしましたが、元の DataTable 変数を表す方法がわからないため、試してみることができません。

更新します

エラーを展開すると、VS から次のように表示されます。

   at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value)
   at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName)
   at WEB.Supervisor.<GetPend>b__b(DataRow dt1) in       E:\Dev\VS\WEB\Supervisor.aspx.cs:line 110
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at WEB.Supervisor.GetPend(String value1FromjqGrid, String value2FromjqGrid) in E:\Dev\VS\WEB\Supervisor.aspx.cs:line 109

109行目と110行目はこれ

List<Supervisor> lines = (from dt1 in dt.AsEnumerable()
                           select new Supervisor()

変換プロセスの開始時にクラッシュします。

更新 2

コメントによると、私は次のようにしました。

を取得し、トラッシュ テーブルを生成するためのSELECTに変換しました。SELECT INTO次に、その設計を確認しましたが、正直驚いたことに、フィールドCAST(ACT_ID AS NVARCHAR(50))はまだ 10 進数であり、予想どおり nvarchar ではありませんでした。

それで、これをLinQ小数として処理する必要があるようですが、それとも何か他のことをすることができますか? 私はdecimals過去に協力しようとしましたが、成功しませんでした。

4

1 に答える 1

3

データベース内の列の型と で使用されるデータの型の間の型の不一致である必要がありますList<Supervisor> lines = (from dt1 in dt.AsEnumerable() select new Supervisor() {...}).ToList();

"ACT_ID"コメントで会話した後、 の型が 10 進数であることがわかりましたdatabase。したがって、例外の問題を修正するには、次のようなことができます。

List<Supervisor> lines = (from dt1 in dt.AsEnumerable()
                          select new Supervisor {
                              ID = dt1.Field<long>("ID"),
                              stringField1 = dt1.Field<string>("Linea"),
                              intField1 = dt1.Field<int>("Tiempo"),
                              intField2 = dt1.Field<int>("TIPOACTIVIDAD_ID"),
                              stringField2 = dt1.Field<decimal>("ACT_ID").ToString(),
                              stringField3 = dt1.Field<string>("OBS")
                          }).ToList();
于 2013-04-26T22:49:38.190 に答える