如何获得带有 dapper 的可空 int[]
本文关键字:int 何获得 dapper | 更新日期: 2023-09-27 18:35:18
如果我想使用 Dapper 获取一堆包含单列int
的行,并且此结果集可能为空。使用 Dapper 查询此数据的最佳方法是什么?
例如,如果我有以下方法返回我想要的内容:
public void int[] GetInts()
{
conn.Query<int?>("select 123 where 1=1")
.Where(x=> x.HasValue)
.Select(x => x.Value)
.ToArray();
}
如果我将行更改为:
conn.Query<int>("select 123 where 1=0").ToArray();
没有结果时,我收到转换错误。
堆栈跟踪如下,例外只是在强制转换(T)next
时未设置为对象实例的对象引用:
at Dapper.SqlMapper.<QueryInternal>d__13`1.MoveNext() in .'SqlMapper.cs:line 611
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in .'SqlMapper.cs:line 539
好吧,如果它是一个整数,Where
和Select
没有任何意义。 很确定您要删除它们。
conn.Query<int>("select 123 where 1=0")
.ToArray();
当你这样做时,你有什么问题吗?
我的问题是我在代码中做了一个LEFT JOIN
,但是当我试图重现错误时,我使用的是INNER JOIN
,所以,我无法重现相同的行为。使用 LEFT JOIN
,返回了值为 NULL
的单行,这就是我在 NULL
和 int
之间出现转换错误的原因。