我有以下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/

10-11 02:33