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

Dapper动态集合上的动态Linq-可能

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