无论我多么努力,我都无法使它发挥作用,我也不确定它是否有可能。我想选择至少有一个订单的所有客户。
我第一次尝试的是db.Exists,如下所示:
SqlExpression<Client> exp = OrmLiteConfig.DialectProvider.SqlExpression<Client>(); exp.Where(x => Db.Exists<Order>(z => z.ClientId == x.Id));
但是我得到了以下错误
变量'x‘的类型'assembly.Client’引用范围‘,但它没有定义’
第二次尝试是使用Join和SelectDistinct:
SqlExpression<Client> exp = OrmLiteConfig.DialectProvider.SqlExpression<Client>(); ev.Join<Client, Order>((b, a) => b.Id == a.ClientId) .SelectDistinct(x => new { x.Id, x.ClientNumber, x.ClientNameName});
虽然不是最优的,但直到我需要通过结果集分页的时候,它才起作用。
ev.Limit(skip:((request.Page-1) * request.PageSize), rows:request.PageSize)
当使用限制时,在构建查询时会忽略不同的逻辑,所以我现在得到了重复的客户机。
有没有其他方法,或者一般情况下,是否有其他方法来处理OrmLite中的子查询?任何帮助都是非常感谢的。
发布于 2014-11-13 10:47:47
ServiceStack OrmLite (目前为4.0.x)不支持子查询。
如果您查看4.0.x文档,就不会讨论子查询。最近添加了联接支持,但是对于高级SQL,您需要你自己写吧。
老实说,在某种程度上,SQL比高级ORM/LINQ风格的查询更具可读性。
https://stackoverflow.com/questions/25036361
复制