Dapper动态集合上的动态Linq-可能
本文关键字:动态 Linq- 可能 集合 Dapper | 更新日期: 2023-09-27 18:27:38
我们正在研究使用LinQ查询Dapper创建的内部动态集合。问题是:
如何使用Scott Guthrie动态LinQ(或其他可能的技术)对集合执行动态LinQ?(http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library)
这就是我们想要做的(非常简化):
使用Dapper返回动态集合(此处称为行):
rows = conn.Query(“select ACCOUNT, UNIT, AMOUNT from myTable”);
如果我们使用"静态"的LinQ查询,就没有问题。所以这很好:
var result = rows.Where(w => w.AMOUNT > 0);
但我们想用动态Linq:写一些类似的东西
var result = rows.Where("AMOUNT > 0");
但我们无法让它发挥作用。
我们得到的错误是:
类型"Object"中不存在属性或字段"AMOUNT"
(我们也尝试了很多其他语法,但无法正常工作)
请注意:当Dapper从数据库请求数据时,我们不想使用动态SQL(这很容易)。我们希望在Dapper查询返回的集合上执行许多小的动态Linq语句。
ScottGu的动态Linq是否只适用于"Linq到SQL"?
有没有其他方法可以实现同样的目标?(性能是一个关键问题)
/Erik
conn.Query("...")
返回一个CCD_ 1。然而,"动态LINQ"早于dynamic
,可能没有人更新它来使用dynamic
;这当然可以做到,但这是一项工作(并非微不足道)。选项:
- 对某些
T
使用Query<T>
- 对"动态LINQ"进行必要的更改,并最好将这些更改提供给更广泛的社区
我怀疑conn.Query(“select ACCOUNT, UNIT, AMOUNT from myTable”);
返回IEnumerable<object>
。为了使DLinq工作,您需要IEnumerable<TheActualType>
。
你可以试试这个:
conn.Query<dynamic>("yourQueryString")
.ToList()
//.ToAnonymousList()
.Where("AMOUNT > 0");
如果这不起作用,您可以尝试使用ToAnonymousList,它试图返回IList<TheActualType
。