C# 如何使用dapper获得可为null的int[]值?
如果我想使用Dapper获得一组包含一列C# 如何使用dapper获得可为null的int[]值?,c#,sql-server-2008,dapper,C#,Sql Server 2008,Dapper,如果我想使用Dapper获得一组包含一列int的行,那么这个结果集可能是空的。使用Dapper查询这些数据的最佳方法是什么 例如,如果我有以下返回所需内容的方法: public void int[] GetInts() { conn.Query<int?>("select 123 where 1=1") .Where(x=> x.HasValue) .Select(x => x.Value) .ToArray();
int
的行,那么这个结果集可能是空的。使用Dapper查询这些数据的最佳方法是什么
例如,如果我有以下返回所需内容的方法:
public void int[] GetInts()
{
conn.Query<int?>("select 123 where 1=1")
.Where(x=> x.HasValue)
.Select(x => x.Value)
.ToArray();
}
嗯,
Where
和Select
如果是int,则没有任何意义。您一定要删除它们
conn.Query<int>("select 123 where 1=0")
.ToArray();
conn.Query(“选择123,其中1=0”)
.ToArray();
你这样做有什么问题吗?我的问题是我在代码中做了一个
左连接
,但是当我试图重现错误时,我使用了一个内部连接
,因此,我无法重现相同的行为。使用LEFT JOIN
,返回了一个值为NULL
的单行,这就是为什么我在NULL
和int
之间出现强制转换错误的原因。有什么异常?Stacktrace?两个示例都不是可编译代码。你能不能注意确保这两个都是你曾经尝试过的?(x=>v.Value
有打字错误,并且.Query
与x.HasValue
一起使用也不合法。)你的Dapper版本有多新?@KirkWoll今天刚刚更新了Dapper,以确保它不是版本问题。我刚刚更新了我的Dapper版本,我(仍然)无法重现该问题。@KirkWoll我已经用我的示例重试了,但它没有产生行为。在我的实际查询中有多个连接,我正在尝试用一个示例查询进行复制。是的,这就是问题所在。如果我将泛型类型参数改为int?
,我可以过滤掉没有值的参数(它们都是)。如果查询实际返回的值是null
,那么您需要让代码看起来像您的第一个代码段。怎么了?为什么要更改它?返回0行,而不是null
的行。如果我将参数更改为int?
我得到一个IEnumerable
,带有.Count()==1
,并且对象为null
@scottm,那么代表提供者来说,这是一个糟糕的决定;它实际上应该只返回一个空的枚举。因为它返回一个带有null的项,所以它们让您别无选择,只能使用第一种方法。
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
conn.Query<int>("select 123 where 1=0")
.ToArray();