2010-12-15 26 views
1

列の長さ(EndDate - StartDate)を持つデータベースビュー(Sql Server 2005)があり、.NETのTimeSpanプロパティにマップする必要があります。NHibernateでのマッピングの継続時間

DATEDIFF(ms, StartDate, EndDate) * 10000 AS Duration 

...しかし、それは私には醜いソリューションを思わ:

は、これまでのところ私の最高の推測では、このように、int型にビューでそれを変換することです。

これを行うにはどうすればよいですか?

EDIT:(無効は「Int64型」から「日時」からキャスト)ので、そこに価値を加えていない

<property name="Duration" formula="EndDate - StartDate" type="timespan" /> 

...しかし、それはまた、エラーが発生します。 私はまた、式を使用してみました。

+0

ん '式= "DATEIFF( 'MS'、終了日、BEGINDATE)* 1000"'の仕事を助け計算

希望を作る方法を気にすることができますか? – Firo

答えて

1

あなたの質問に正確な答えはありませんが...私はnhibernateクラスの違いを実行します。

myclass.cs

public virtual DateTime dstart {get;set;} 
public virtual DateTime dend {get;set;} 

// This property not being part oh nhibernate mapping 
public TimeSpan MyDifference 
{ 
    get {return dend.Subtract(dstart); 
} 

このように、あなたは選択を行うときにinnecesary substractsを実行するRDBMSに過負荷をかけないでください、あなたが必要なだけで計算を行います。マップされたプロパティでもなくてもかまいません(とにかく読んでください)。 MyDifferenceを使用することができ、nowoneは教えてくれたり、または誰が、これは

+0

概要グリッドに表示するには、それらが必要です。この方法では、一般的な方法で期間列にソートを適用することはできませんので、私のためのオプションはありません。 – Koen

+0

あなたは本当ですか??私はなぜか分からない –

+0

並べ替えはSql Serverによって処理され、メモリ内の読み込まれたオブジェクト(純粋な効率)では処理されないためです。ページングも行うので、まずデータを並べ替えて適切なページを取得する必要があります。メモリのdurationカラムをソートすると、結果セット全体をメモリにロードしてソートし、メモリからページを取得する必要があります。それは効率的ではありません... – Koen

関連する問題