我有一个查询,在我不需要参数的地方计数/分组(没有where子句)。
使用dapper运行无参数查询的语法是什么?
var _results = _conn.Query<strongType>("Select Count(columnA) as aCount, ColumnB, ColumnC from mytable group by ColumnB, ColumnC");
不起作用。
我已经尝试了几种不同的方式,但我仍然得到"ArgumentNullException是由用户代码未处理的"。
试着自己弄清楚,到处找,我放弃了。提前谢谢。
Edit:下面是SqlMapper.cs抛出错误的代码行。第1334行
il.Emit(OpCodes.Newobj, typeof(T).GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null));
错误详细信息:Value不能为null。参数名称:con
将单个结果映射回去就可以了:
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
是行不通的。
try
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);
值不能为空。参数名称:con
这个错误是由几个动态orm抛出的,包括dapper, PetaPoco和Massive,但它通常是相同的问题:确保你在不想包含的属性上使用[Ignore]属性。这包括从基类继承的属性。错误是无用的,但这就是它的意思。
可能发生此错误,因为您试图在返回对象中设置的属性是get-only。当然,Dapper需要能够设置所有属性。您可以考虑使用一个单独的数据库DTO对象,然后在从数据库读取后将其转换为适当的不可变域对象。
改变:
public string MyProperty { get; }
:
public string MyProperty { get; set; }