2009-04-19 5 views
2

どのように私は 亜音速クエリ(ConditionA OR ConditionB)AND ConditionC

ConditionC

(ConditionA OR ConditionB)AND この形式のIVは様々なアプローチを試みたが、私という亜音速でクエリを作成しますカントは望みの結果を得ているようです。ここで

は私が疲れて一つのことです。私は間違っていないよ場合

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

答えて

2

は、私はいくつかを試してみましたRobの例の変形ですが、「少なくとも1つのテーブルが指定されている必要があります」というメッセージで引き続き例外が発生していました。

  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>(); 
2

、これはORと亜音速「機能」です。

一部interresing事hereを探す:

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

編集のようなあなたのサブソニッククエリはこの場合

(ConditionA AND ConditionC) OR (ConditionB AND ConditionC) 

としてクエリをリファクタリング。主な考え方は、

CloseExpression() 

タグを使用しています。

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>(); 

:私はサブソニック2.2使用してい http://blog.wekeroad.com/subsonic/subsonic-version-21-pakala-preview-the-new-query-tool/

+0

私はこの問題を具体的に解決しているわけではありませんか?これはもっと構文的な砂糖ですか? – Dan

+1

質問は - 表現のために括弧で囲む方法についての質問です - これはそれを行う方法のサンプルクエリです。 –

+0

到着!見つけた – Dan

0

あなたはすでにこれは非常に簡単ですLINQクエリで、SubSonic3を使用する場合:

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

クエリツールで(他の人が述べたように)OrExpression/CloseExpressionがために右のクエリを生成するための正しい方法でありますきみの。