public void Select_MultipleResultSets() { var batchCmdBuilder = new DbBatchCommandBuilder(DbAdapter.CommandBuilder.DbFactory); batchCmdBuilder.BeginBatch(); batchCmdBuilder.GetSelectCommand(new Query("companies")); batchCmdBuilder.GetSelectCommand(new Query("contacts")); var selectMultipleCmd = batchCmdBuilder.EndBatch(); (var companies, var contacts) = DbAdapter.Select(selectMultipleCmd).ExecuteReader((rdr) => { var companiesRes = new DataReaderResult(rdr).ToList <CompanyModelAnnotated>(); rdr.NextResult(); var contactsRes = new DataReaderResult(rdr).ToList <ContactModel>(); return(companiesRes, contactsRes); }); Assert.Equal(2, companies.Count); Assert.Equal(5, contacts.Count); }
public static void RunSelectMultipleResultSet(DbContext dbContext) { // lets generate several selects in one command var batchCmdBuilder = new DbBatchCommandBuilder(dbContext.DbFactory); Console.WriteLine("Composing 2 selects in one DbCommand (multiple result sets)"); batchCmdBuilder.BeginBatch(); batchCmdBuilder.GetSelectCommand(new Query("Customers", (QField)"Country" == (QConst)"Germany")); batchCmdBuilder.GetSelectCommand(new Query("Orders", new QConditionNode((QField)"CustomerID", Conditions.In, new Query("Customers.c", (QField)"c.Country" == (QConst)"Germany").Select("c.CustomerID") ) )); var multiSelectCmd = batchCmdBuilder.EndBatch(); multiSelectCmd.Connection = dbContext.Connection; RecordSet customerRS = null; RecordSet orderRS = null; dbContext.Connection.Open(); try { using (var rdr = multiSelectCmd.ExecuteReader()) { customerRS = RecordSet.FromReader(rdr); if (rdr.NextResult()) { orderRS = RecordSet.FromReader(rdr); } } } finally { dbContext.Connection.Close(); } Console.WriteLine($"Loaded {customerRS.Count} customers and {orderRS.Count} their orders from one data reader"); }