1

私はlinqをnhibernateクエリに持っています:

var listka = 
    from i in FakturyZakupu.Queryable 
    where String.Compare(i.REJESTRY.REJ_KOD,sbWartoscBetween1.ToString()) >= 0 
    && String.Compare(i.REJESTRY.REJ_KOD,sbWartoscBetween2.ToString()) <= 0 
    select i;

lista = listka.ToList();   

そして、それは非常にうまくコンパイルされていますが、私がそれを使用すると、例外がスローされます:

NotSupportedException int32 CompareTo(System.String、System.String)

2つの値の間にlinqクエリ文字列値を使用するにはどうすればよいですか。SQLの場合と同様に、テーブルから*を選択します。ここで、idはaとbの間にありますか?

4

3 に答える 3

4

NHibernate の Linq プロバイダーは非常に拡張可能です。NHibernate の Linq は HQL に変換されているため、その式を HQL で記述できる限り、任意の式を許可するように拡張できます。

したがって、Between の拡張機能を作成すると、コードは次のようになります。

var listka = 
    from i in FakturyZakupu.Queryable 
    where i.REJESTRY.REJ_KOD.Between(sbWartoscBetween1, sbWartoscBetween2) 
    select i;

lista = listka.ToList();

開始するためのリンクを次に示します。

于 2012-07-13T10:58:10.627 に答える
0

NHibernate v3.3.3 では、String.Compare がサポートされています。式の AString.Compare(MyProp, "value") > 0は、Whereと同様の sql を生成しwhere MyProp > 'value'ます。

于 2014-03-03T16:21:15.057 に答える
-1

このようなクエリでは、String.Compare の代わりに大なり (>) または小なり (<) 演算子を使用するだけで比較を回避できます。例えば:

var listka =
    from i in FakturyZakupu.Queryable
    where i.REJESTRY.REJ_KOD > sbWartoscBetween1.ToString() &&
    i.REJESTRY.REJ_KOD < sbWartoscBetween2.ToString()
    select i;

の成功は、データベースの文字列比較の解釈に依存する場合がありますが、通常は問題なく動作するはずです。

于 2013-08-27T16:40:12.717 に答える