Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用dapper获得可为null的int[]值?_C#_Sql Server 2008_Dapper - Fatal编程技术网

C# 如何使用dapper获得可为null的int[]值?

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();

如果我想使用Dapper获得一组包含一列
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();