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



我有一个查询,在我不需要参数的地方计数/分组(没有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; }

相关内容

  • 没有找到相关文章

最新更新