我有一个查询执行计数/组,我不需要参数(没有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
答案 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; }