0


0

私はコレクションで使用できる亜音速クエリに次のSQLスクリプトを作成しようとしています。

tableAから*を選択します。ここで、tableA.InvoiceID = @InvoiceおよびtableA.VersionID = @VersionIDおよびtableA.ActiveDate> = GetDate()および(tableB.InActiveDateがnullまたはtableB.InActiveDate <= GetDate())

これが私の現在のコードです:

orders = new OrdersCollection(); query = new SubSonic.Query(Tables.Orders); query.WHERE( "InvoiceID"、Invoice.InvoiceID); query.AND( "VersionID"、version.VersionID); query.AND( "ActiveDate"、SubSonic.Is.LessThanOrEqualTo(System.DateTime.Now.ToString())。Value); query.AND( "InActiveDate"、SubSonic.Comparision.Is、null).OR( "InActiveDate"、SubSonic.Is.GreaterThanOrEqualTo( "System.DateTime.Now.ToString())。Value);

query.CommandTimeOut = intSubSonicTimeOut; partXrefColl.Load(FilePartXref.FetchByQuery(query));

私が遭遇していると思う問題は、日付とORステートメントの評価です。 InvoiceIDとVersionIDだけで試してみたところ、コレクションにデータが戻ってきました。

任意の助けは大歓迎です。

6 Answer


0


SQLには「以下」演算子(⇐)が表示されていますが、GreaterThanOrEqualTo()と記述しています。 論理の逆転はあなたの問題を引き起こす可能性がありますか?


0


申し訳ありませんが、SQLクエリの正しい構文は次のとおりです。

tableAから*を選択します。ここで、tableA.InvoiceID = @InvoiceおよびtableA.VersionID = @VersionIDおよびtableA.ActiveDate <= GetDate()および(tableB.InActiveDateがnullまたはtableB.InActiveDate> = GetDate())

そして規範は次のようになっているはずです。

orders = new OrdersCollection(); query = new SubSonic.Query(Tables.Orders); query.WHERE( "InvoiceID"、Invoice.InvoiceID); query.AND( "VersionID"、version.VersionID); query.AND( "ActiveDate"、SubSonic.Is.LessThanOrEqualTo(System.DateTime.Now.ToString())。Value); query.AND( "InActiveDate"、SubSonic.Comparision.Is、null).OR( "InActiveDate"、SubSonic.Is.GreaterThanOrEqualTo( "System.DateTime.Now.ToString())。Value);

orders.Load(Invoices.FetchByQuery(query);

混乱させて申し訳ありません。


0


当てずっぽう:

"SubSonic.Comparision.Is、null"は "IS NULL"にマッピングされておらず、代わりに "= NULL"にマッピングされています


0


SubSonic 2.1以降を使用していると仮定すると、そのクエリは次のように書くことができます。

OrdersCollection orders = DB.Select.From(Orders.Schema).Where(Orders.Columns.InvoiceID).IsEqualTo(1)。(Orders.Columns.VersionID).IsEqualTo(1).And(Orders.Columns.ActiveDate) .IsLessThanOrEqualTo(DateTime.Now).AndExpression(Orders.Columns.InActiveDate).IsNull().Or(Orders.Columns.InActiveDate).IsGreaterThanOrEqualTo(DateTime.Now).ExecuteAsCollection();

AndExpressionは、それがネストされた後にOr制約を引き起こします


0


Adamはそれを正確に持っています - あなたが見逃しているのはAndExpressionで与えられるそれのExpression部分です


0


ちょっとしたデバッグの後、私は以下のようにクエリを完成させることができました:

OrderColl = DB.Select()From(Orders.Schema).Where(Orders.Columns.VersionID).IsEqualTo(バージョン。バージョンID).And(Orders.Columns.FulfillNumber).IsEqualTo(invoice.InvocieID).And(Orders .Columns.ActiveDate).IsLessThanOrEqualTo(DateTime.Now).AndExpression(Orders.Columns.InactiveDate).IsNull()。またはOr( "InActiveDate")

ご協力ありがとうございました。