0

Linqをdatatableクエリに従えば、エラーが発生します。特定のキャストは無効です

decimal[] temp = dt.AsEnumerable()
    .Select(r => new
       {
           totLen = r.Field<decimal>("Quantity") 
                     * (r.Field<decimal>("Breath") 
                         * r.Field<decimal>("Length"))
       })
    .Cast<decimal>()
    .ToArray();

誰かが私に理由を提案できますか?

4

4 に答える 4

1

匿名タイプを作成する必要はありません。

decimal[] temp = dt.AsEnumerable()
    .Select(r => r.Field<int>("Quantity") 
               * r.Field<decimal>("Breath") 
               * r.Field<decimal>("Length"))
    .ToArray();
于 2013-01-22T10:31:14.413 に答える
1

匿名タイプを10進数にキャストしようとしていますが、これはもちろん機能しません。匿名タイプを作成しないでください-単に10進値を選択してください:

decimal[] temp = (from r in dt.AsEnumerable()
                  select r.Field<decimal>("Quantity") * 
                         r.Field<decimal>("Breath") * 
                         r.Field<decimal>("Length")).ToArray();

Linqメソッドの構文と同じです。

decimal[] temp = dt.AsEnumerable()
                   .Select(r => r.Field<decimal>("Quantity") * 
                                r.Field<decimal>("Breath") * 
                                r.Field<decimal>("Length"))
                   .ToArray();

コードを機能させる方法は?Selectの代わりに使用Cast

.Select(x => x.totLen).ToArray();

ただし、単一の値を選択するために匿名タイプは必要ありません。

于 2013-01-22T10:32:04.897 に答える
1

decimalからストレートを返すことができるはずですSelect()

decimal[] temp = dt.AsEnumerable().Select(
    r => r.Field<decimal>("Quantity") * (r.Field<decimal>("Breath") * r.Field<decimal>("Length")
)).ToArray();
于 2013-01-22T10:28:42.587 に答える
0

射影(Select)は、次のような匿名タイプのインスタンスを作成します。

class SomeAnonymousClass
{
   public totLen { get; set; }
}

...どのインスタンスを10進数にキャストできないか。

于 2013-01-22T10:26:58.467 に答える