3

Subsonic でこの形式のクエリを作成するにはどうすればよいですか

(条件A OR 条件B) AND 条件C

さまざまなアプローチを試みましたが、望ましい結果が得られないようです。

ここに私が疲れたことが1つあります:

Query q = Challenge.CreateQuery();
      q.WHERE(Challenge.Columns.ChallengeeKey, playerKey)
      .OR(Challenge.Columns.ChallengerKey, playerKey);
       q.AND(Challenge.Columns.Complete, false);
4

4 に答える 4

7

2.2 (または 2.1) を使用している場合は、式を開くことができます。

Northwind.ProductCollection products = new Select(Northwind.Product.Schema)
    .WhereExpression("categoryID").IsEqualTo(5).And("productid").IsGreaterThan(10)
    .OrExpression("categoryID").IsEqualTo(2).And("productID").IsBetweenAnd(2, 5)
    .ExecuteAsCollection<Northwind.ProductCollection>();

ここでもう少し読むことができます: http://blog.wekeroad.com/subsonic/subsonic-version-21-pakala-preview-the-new-query-tool/

于 2009-04-19T20:56:44.433 に答える
2

Subsonic 2.2 を使用しています。Rob の例でいくつかのバリエーションを試しましたが、例外が発生し続け、次のメッセージが表示されました。

最終的に、これは望ましい結果を達成しました:

          Challenge challenge = new Select().From(Challenge.Schema)
           .WhereExpression(Challenge.Columns.ChallengerKey).IsEqualTo(playerKey)
           .Or(Challenge.Columns.ChallengerKey).IsGreaterThan(playerKey)
           .AndExpression(Challenge.Columns.Complete).IsEqualTo(false)
           .ExecuteSingle<Challenge>();
于 2009-04-21T20:33:55.983 に答える
2

私が間違っていなければ、これは OR を備えた亜音速の「機能」です。

クエリを次のようにリファクタリングします

(ConditionA AND ConditionC) OR (ConditionB AND ConditionC)

この場合、Subsonic クエリは次のようになります。

q.WHERE(...).AND(...).OR(...).AND(...)

編集:

ここで興味深いものを見つけてください。主なアイデアは、

CloseExpression()

鬼ごっこ。

于 2009-04-19T19:22:23.457 に答える
0

すでにSubSonic3を使用している場合、linqクエリを使用すると、これは非常に簡単です。

var result = from c in db.Challenges
             where (c.ChallengeeKey == playerKey || c.ChallengerKey == playerKey)
                 && c.Complete == false
             select c;

クエリツールを使用すると(他の人が言及しているように)OrExpression / CloseExpressionは、適切なクエリを生成するための適切な方法です。

于 2010-12-03T14:47:02.833 に答える