无论我怎么努力,我都无法使它工作,我不确定它是否可行。 我想选择至少有一个订单的所有客户。
我尝试的第一件事是db.Exists如下:
SqlExpression<Client> exp = OrmLiteConfig.DialectProvider.SqlExpression<Client>();
exp.Where(x => Db.Exists<Order>(z => z.ClientId == x.Id));
但是我收到以下错误
类型'[assembly] .Client'的变量'x',从范围''引用,但它未定义。
第二次尝试使用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)
使用Limit时,在构建查询时逻辑上会忽略distinct,因此我现在得到重复的客户端。
还有其他方法,或者通常是在那里处理OrmLite中的子查询? 任何帮助表示赞赏。
答案 0 :(得分:1)
ServiceStack OrmLite(目前为4.0.x)不支持子查询。
如果查看4.0.x文档,则不会讨论子查询。最近添加了JOIN支持,但对于高级SQL,您需要write it yourself。
老实说,在复杂的某个点上,SQL比高级ORM / LINQ样式查询更具可读性。