我有以下Subsonic 3.0查询,其中包含嵌套的NotIn查询:
public List<Order> GetRandomOrdersForNoReason(int shopId, int typeId)
{
// build query
var q = new SubSonic.Query.Select().Top("1")
.From("Order")
.Where("ShopId")
.IsEqualTo(shopId)
.And(OrderTable.CustomerId).NotIn(
new Subsonic.Query.Select("CustomerId")
.From("Customer")
.Where("TypeId")
.IsNotEqualTo(typeId))
.OrderDesc("NewId()");
// Output query
Debug.WriteLine(q.ToString());
// returned typed list
return q.ExecuteTypedList<Order>();
}
内部查询似乎不正确:
SELECT TOP 1 *
FROM [Order]
WHERE ShopId = @0 AND CustomerId NOT IN (SELECT CustomerId
FROM [Customer]
WHERE TypeId = @0)
ORDER BY NewId() ASC
您会注意到两个参数均为@ 0。我假设对于每个“新” Select查询都枚举参数(从零开始)。但是,在两个Select查询嵌套的情况下,我希望输出具有名为@ 0和@ 1的两个参数。
我的查询基于Rob Conery在博客上发布的one,该预览是Subsonic 3的“ Pakala”查询工具的预览。他的示例是:
int records = new Select(Northwind.Product.Schema)
.Where("productid")
.In(
new Select("productid").From(Northwind.Product.Schema)
.Where("categoryid").IsEqualTo(5)
)
.GetRecordCount();
有人看到过这种行为吗?是错误,还是错误或我的责任?由于我是Subsonic的新手,所以我猜测这可能是程序员的错误,但我希望尽可能地确认。
最佳答案
刚刚在最新版本中遇到了这个完全相同的问题,因此显然它尚未得到解决。我尝试切换条件的顺序(先输入NotIn条件),然后就成功了。这是新代码的样子,它生成了参数@ 0和@ 1而不是@ 0和@ 0:
var q = new SubSonic.Query.Select().Top("1")
.From("Order")
.Where(OrderTable.CustomerId).NotIn(
new Subsonic.Query.Select("CustomerId")
.From("Customer")
.Where("TypeId")
.IsNotEqualTo(typeId)
)
.And("ShopId")
.IsEqualTo(shopId)
.OrderDesc("NewId()");
关于c# - Subsonic 3 ActiveRecord嵌套选择NotIn错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2995268/