QuerySingle
描述
QuerySingle是一个可以从IDbConnection类型的任意对象调用的扩展方法,它可以执行查询并映射第一个结果,如果序列中没有元素则会引发异常。
结果可以映射到:
- 匿名类型
- 强类型
参数
下表显示了QuerySingle方法的不同参数。
| 名称 | 描述 |
|---|---|
| sql | 要执行的查询。 |
| param | 查询参数(默认为null)。 |
| transaction | 需要使用的事务(默认为null)。 |
| commandTimeout | 命令执行超时时间(默认为null)。 |
| commandType | 命令类型(默认为null)。 |
First, Single & Default
注意使用正确的方法。First和Single的方法是非常不同的。
| 结果 | 没有项 | 有一项 | 有多项 |
|---|---|---|---|
| First | 抛异常 | 当前项 | 第一项 |
| Single | 抛异常 | 当前项 | 抛异常 |
| FirstOrDefault | 默认值 | 当前项 | 第一项 |
| SingleOrDefault | 默认值 | 当前项 | 抛异常 |
案例 - 查询匿名类型
执行查询并将第一个结果映射到动态类型列表,如果序列中没有元素则会引发异常。
string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";
using (var connection = My.ConnectionFactory())
{
connection.Open();
var invoice = connection.QuerySingle(sql, new {InvoiceID = 1});
}
案例 - 查询强类型
执行查询并将第一个结果映射到强类型列表,如果序列中没有元素则会引发异常。
string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";
using (var connection = My.ConnectionFactory())
{
connection.Open();
var invoice = connection.QuerySingle<Invoice>(sql, new {InvoiceID = 1});
}
QuerySingleOrDefault
描述
QuerySingleOrDefault是一个可以从IDbConnection类型的任意对象调用的扩展方法,它可以执行查询并映射第一个结果,如果序列为空则为默认值。如果序列中有多个元素,则此方法将引发异常。
结果可以映射到:
- 匿名类型
- 强类型
参数
下表显示了QuerySingleOrDefault方法的不同参数。
| 名称 | 描述 |
|---|---|
| sql | 要执行的查询。 |
| param | 查询参数(默认为null)。 |
| transaction | 需要使用的事务(默认为null)。 |
| commandTimeout | 命令执行超时时间(默认为null)。 |
| commandType | 命令类型(默认为null)。 |
First, Single & Default
注意使用正确的方法。First和Single的方法是非常不同的。
| 结果 | 没有项 | 有一项 | 有多项 |
|---|---|---|---|
| First | 抛异常 | 当前项 | 第一项 |
| Single | 抛异常 | 当前项 | 抛异常 |
| FirstOrDefault | 默认值 | 当前项 | 第一项 |
| SingleOrDefault | 默认值 | 当前项 | 抛异常 |
案例 - 查询匿名类型
执行查询并将第一个结果映射到动态类型列表,如果序列为空则为默认值。如果序列中有多个元素,则此方法将引发异常。
string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";
using (var connection = My.ConnectionFactory())
{
connection.Open();
var invoice = connection.QuerySingleOrDefault(sql, new {InvoiceID = 1});
}
案例 - 查询强类型
执行查询并将第一个结果映射到强类型列表,如果序列为空则为默认值。如果序列中有多个元素,则此方法将引发异常。
string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";
using (var connection = My.ConnectionFactory())
{
connection.Open();
var invoice = connection.QuerySingleOrDefault<Invoice>(sql, new {InvoiceID = 1});
}
QueryMultiple
描述
QueryMultiple是一个可以从IDbConnection类型的任意对象调用的扩展方法,它可以在相同的命令和映射结果中执行多个查询。
string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID; SELECT * FROM InvoiceItem WHERE InvoiceID = @InvoiceID;";
using (var connection = My.ConnectionFactory())
{
connection.Open();
using (var multi = connection.QueryMultiple(sql, new {InvoiceID = 1}))
{
var invoice = multi.Read<Invoice>().First();
var invoiceItems = multi.Read<InvoiceItem>().ToList();
}
}
参数
下表显示了QueryMultiple方法的不同参数。
| 名称 | 描述 |
|---|---|
| sql | 要执行的查询。 |
| param | 查询参数(默认为null)。 |
| transaction | 需要使用的事务(默认为null)。 |
| commandTimeout | 命令执行超时时间(默认为null)。 |
| commandType | 命令类型(默认为null)。 |
本文深入探讨了数据库查询中的QuerySingle、QuerySingleOrDefault和QueryMultiple三种关键方法,详细解析了每种方法的参数设置、结果映射及应用场景。通过具体案例展示了如何在不同情况下选择合适的方法进行高效的数据查询。
1307

被折叠的 条评论
为什么被折叠?



