如果在使用Dapper查询时不需要参数怎么办?

时间:2011-08-22 22:31:40

标签: dapper

我有一个查询执行计数/组,我不需要参数(没有where子句)。

使用dapper运行无参数查询的语法是什么?

var _results = _conn.Query<strongType>("Select Count(columnA) as aCount, ColumnB, ColumnC from mytable group by ColumnB, ColumnC");

不起作用。

我尝试了几种不同的方法,但我仍然继续“ArgumentNullException未被用户代码处理”。

试图弄清楚自己,全身心地搜寻,我放弃了。提前谢谢。

编辑:以下是SqlMapper.cs中抛出错误的代码行。这是第1334行

il.Emit(OpCodes.Newobj, typeof(T).GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null));

错误详细信息:值不能为空。参数名称:con

4 个答案:

答案 0 :(得分:4)

将单个结果映射回来就可以了:

var a = cnn.Query<int>("select 1").Single()
// a is 1

如果您的查询以某种方式返回无结果,则可能会遇到麻烦,例如:

select count(Id) from 
(
select top 0 1 as Id, 2 as Title
) as X
group by Title

返回0结果,因此对空结果集执行Single不起作用。

答案 1 :(得分:0)

var _results = _conn.Query("Select columnB, Count(columnA) C from mytable group by columnB");

int ColumnB = ((int)_results[0].ColumnB);
int C = ((int)_results[0].C);

答案 2 :(得分:0)

值不能为空。参数名称:con

这是由几个动态ORM引发的错误,包括Dappper,PetaPoco和Massive,但它通常是同样的问题:确保您在不想包含的属性上使用[Ignore]属性。这包括从基类继承的属性。错误是无用的,但这意味着什么。

答案 3 :(得分:0)

发生此错误的原因是您尝试在返回对象中设置的属性为仅限get 。当然,Dapper需要能够设置所有属性。您可以考虑使用单独的数据库DTO对象,然后在从数据库读取后将其转换为正确不可变的域对象。

改变这个:

public string MyProperty { get; }

到此:

public string MyProperty { get; set; }