在 Dapper Multiple Results 中,当 where 子句依赖于第一个查询的结果时,如何使第二行查询工作?

Joh*_* Po 5 c# sql dapper

获取客户列表及其相关订单和退货示例:

var sql = @"select * from Customers
select * from Orders where CustomerId = (depends on first query)
select * from Returns where CustomerId = (depends on first query)";

using (var multi = connection.QueryMultiple(sql))
{
   var customer = multi.Read<Customer>().ToList();
   var orders = multi.Read<Order>().ToList();
   var returns = multi.Read<Return>().ToList();
   ...
} 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 3

这最终是一个SQL问题。这里 dapper 没有做任何额外或不同的事情 - 如果您批量发出多个选择,它们必须是有效的 SQL。有几种方法可以做到这一点,包括:

  • 本地 sql 变量(通常是一行)
  • 临时表或(更好的)表变量
  • 连接或子查询
  • ETC

如果您无法构造 SQL 来执行您想要的操作,请考虑单独运行第一个查询。