3

如果我想获得一堆包含单列的行int,使用 Dapper,并且此结果集可能为空。使用 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
4

2 回答 2

0

好吧,如果它是一个 int,则WhereandSelect没有任何意义。很确定你想删除它们。

conn.Query<int>("select 123 where 1=0")
    .ToArray();

当你这样做时,你有什么问题吗?

于 2012-05-25T20:53:51.803 回答
0

我的问题原来是我在做一个LEFT JOINin 代码,但是当我试图重现我使用的错误时INNER JOIN,我无法重现相同的行为。使用LEFT JOIN,返回值为 的单行,NULL这就是为什么我在NULL和之间出现转换错误的原因int

于 2012-05-29T15:21:27.970 回答