C# 亚音速查询(条件A或条件B)和条件C
如何以这种格式的亚音速构建查询 (条件A或条件B)和 条件性 我尝试了各种方法,但似乎没有达到预期的效果 有一件事我很累:C# 亚音速查询(条件A或条件B)和条件C,c#,subsonic,C#,Subsonic,如何以这种格式的亚音速构建查询 (条件A或条件B)和 条件性 我尝试了各种方法,但似乎没有达到预期的效果 有一件事我很累: Query q = Challenge.CreateQuery(); q.WHERE(Challenge.Columns.ChallengeeKey, playerKey) .OR(Challenge.Columns.ChallengerKey, playerKey); q.AND(Challenge.Columns.Complete,
Query q = Challenge.CreateQuery();
q.WHERE(Challenge.Columns.ChallengeeKey, playerKey)
.OR(Challenge.Columns.ChallengerKey, playerKey);
q.AND(Challenge.Columns.Complete, false);
如果我没有错的话,这是一个亚音速的“特征”,带有或 根据需要重构查询
(ConditionA AND ConditionC) OR (ConditionB AND ConditionC)
在这种情况下,您的亚音速查询如下
q.WHERE(...).AND(...).OR(...).AND(...)
编辑:
找到一些相互关联的东西。主要思想是使用
CloseExpression()
标记。如果使用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>();
Northwind.ProductCollection产品=新选择(Northwind.Product.Schema)
其中,表达式(“类别ID”)等于(5)和(“产品ID”)大于(10)
.oreexpression(“categoryID”).IsEqualTo(2)。和(“productID”)介于和(2,5)之间
.ExecuteAsCollection();
您可以在此处阅读更多内容:
我使用的是亚音速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>();
Challenge Challenge=new Select().From(Challenge.Schema)
.WhereExpression(Challenge.Columns.ChallengerKey).IsEqualTo(playerKey)
.Or(Challenge.Columns.ChallengerKey).IsGreater大于(playerKey)
.AndExpression(Challenge.Columns.Complete).IsEqualTo(false)
.ExecuteSingle();
如果您已经使用了SubSonic3,使用linq查询,这非常简单:
var result = from c in db.Challenges
where (c.ChallengeeKey == playerKey || c.ChallengerKey == playerKey)
&& c.Complete == false
select c;
使用查询工具(如其他人所提到的)或Expression/CloseExpression是为您的应用程序生成正确查询的正确方法。我说这并没有特别解决问题,对吗?这更像是语法上的甜点?我想,问题是如何将表达式包装在paren中-这是一个关于如何进行的示例查询。