0

サブソニック フォーラムで次の質問をしましたが、回答が 1 つしかないようだったので、ここにも投稿して、誰かがこの問題にさらに光を当てることができるかどうかを確認したいと思いました...

Select ツール (または Query ツール) を使用して、SubSonic で次の SQL ステートメントを作成したいと考えています。これは、「SPLIT()」というカスタム関数を使用しています。

SELECT * FROM VwPropertyList
WHERE VwPropertyList.idCreatedBy = 123
AND VwPropertyList.idCounty = 45
AND 29 IN (SELECT Item FROM SPLIT(DistrictGroupList, ','))

(この SQL の最後の部分では SPLIT 関数を使用しています)

私の亜音速の同等物は次のようになります...

Dim mySelect As New SubSonic.Select
mySelect.From(VwPropertyList.Schema)
mySelect.Where(VwPropertyList.Columns.IdCreatedBy).IsEqualTo(123)
mySelect.And(VwPropertyList.Columns.IdCounty).IsEqualTo(45)
mySelect.And(29 .In(New SubSonic.Select("Item").From("SPLIT(" & VwPropertyList.Columns.DistrictGroupList & ", ',')"))

これは最後の部分のために機能しません..「AND 29 IN (SELECT Item FROM SPLIT(DistrictGroupList, ','))」を Subsonic.Select に追加するにはどうすればよいですか?

subsonic フォーラムから得た応答は、Subsonic.Select を廃止し、ハードコーディングされた InlineQuery() ステートメントに置き換えることを提案しました..のように:

Dim SQL as String = "Select " & VwPropertyList.Columns.Item
SQL = SQL & " From " & VwPropertyList.Schema.TableName
SQL = SQL & " Where " & VwPropertyList.Columns.IdCreatedBy & " = @CreatedBy "
SQL = SQL & " And " & VwPropertyList.Columns.IdCounty & " = @County "
SQL = SQL & " And @DistrictGroup IN (Select Item From SPLIT(DistrictGroupList,',')"

Items = SubSonic.InlineQuery().ExecuteTypedList(Of MyItem)(SQL, 123,45,29)

ページング機能などを利用できるように、可能であれば SubSonic.Select を使用したいと思います。

何か案は?

4

4 に答える 4

2

ジョンの提案を実行するか、InlineQuery を使用して SQL を記述することができます。これにより、生の SQL を記述してパラメーターを渡すことができます。

var qry=new InlineQuery("SELECT * FROM table WHERE column=@param",value)

于 2009-03-30T18:25:33.047 に答える
1

元のクエリ オブジェクト (2.1 より前) を次のように使用することができます (未テスト、メモリから):

Query q = new Query(VwPropertyList.Schema.TableName);
q.WHERE("29 IN (SELECT Item FROM SPLIT(DistrictGroupList, ','))");

// pass q.ExecuteReader() to the Load() method of your view.
于 2009-03-30T15:56:23.093 に答える
0

ページングを取得しようとしている場合は、元の Query オブジェクトを使用することをお勧めします。インライン クエリには、ページングを許可するメソッドがありません。

Subsonic.Select を絶対に使用したい場合は、2 つのアイデアをメッシュし、インライン クエリを実行して値のリストを取得してから、通常の Subsonic.Select を使用して、取得した値を選択ケースに渡すことができますが、2 つ作成することになります。データベースへのトリップ。

余談ですが、流暢なインターフェイスを使用して記述された Subsonic.Select ステートメントを読むことを好みます。

SubSonic.Select.AllColumnsFrom() .Where(VwPropertyList.Columns.IdCreatedBy).IsEqualTo(123) .And(VwPropertyList.Columns.IdCounty).IsEqualTo(45) .ExecuteAsCollection();

于 2009-03-30T21:28:36.960 に答える
0

回答ありがとうございます。

私は最終的に InlineQuery を実行し、Subsonic.Select によって通常生成されるページング コードを書き直しました ... 最善の解決策ではありませんが、うまくいくようです。

私がこのようなことをすることができればそれは良いでしょう:

Dim s As New SubSonic.Select
s.From(VwPropertyList.Schema)
sWhere(VwPropertyList.Columns.IdCreatedBy).IsEqualTo(123)
sAnd(VwPropertyList.Columns.IdCounty).IsEqualTo(45)
s.And(29).In( New InlineQuery("(SELECT Item FROM SPLIT(DistrictGroupList, ','))"))

于 2009-03-31T16:56:03.097 に答える