spmetal / linq to sharepoint によって生成されたエンティティでかなり大きな障害にぶつかりました。誰かが以前にこれに対処したことを願っています..または、明らかな何かが欠けている可能性があります。
数値フィールドを持つリストがあるとしましょう。フィールドには、かなり正確な値が保持されることが期待されます。たとえば、0.0000451
. 値がリストに追加されると、SharePoint はそれで問題ありません。リストと表示/編集ビューに正しく表示されます。
spmetal を使用してこのリストに基づいてエンティティを生成すると、..
//...
private System.Nullable<double> _number;
//..
[Microsoft.SharePoint.Linq.ColumnAttribute(Name="Number", Storage="_number", Required=true, FieldType="Number")]
public System.Nullable<double> Number {
get {
return this._number;
}
set {
if ((value != this._number))
{
this.OnPropertyChanging("Number", this._number);
this._number= value;
this.OnPropertyChanged("Number");
}
}
}
//...
spmetal によって決定される型は、double
それを取得しようとすると記法が取得されるためです。たとえば、次のようになります。
var number = (from x in myDc.MyList select x.Number).First();
4.51E-05
number は、実際にはではなくの double になり0.0000451
ます。
これは、小数を使用して修正できると想定しています。生成されたエンティティ全体で型を変更するSystem.Nullable<decimal>
と、型変換エラーが発生します。
これを修正するにはどうすればよいですか?
編集「これにどう対処すればよいか」と尋ねるほうがよいのではないでしょうか。たとえば、後で double 値を 10 進数に単純に変換できます。たとえば、私の linq クエリです。そうすれば、例のケースは期待される結果を返します。しかし、それは不格好に思えます。ソースでこれを修正したいと思います。