【发布时间】:2016-10-26 14:39:03
【问题描述】:
我在 c# 对象中有以下对象结构
new [] {
new SomeType {
Id = XXX,
SomeSubType = new []{z,y,x,w}
},
.
.
.
}
我正在尝试为 Dapper 创建类似于以下 sql 查询的内容。
SELECT *
FROM some_table, some_other_table
WHERE (X = XXX/*@Id*/ AND Y IN (z, y, x, w) /*@SomeSubType*/)
OR (X = AND Y IN (....))
OR (....)
OR (....)
..... )
我可以根据对象动态创建查询,并为每个选项创建大量参数——但这很痛苦。
谁能想到更好的方法来做到这一点?也许是一个更好的查询来确保满足这两个条件?
【问题讨论】:
-
也许您应该读取平面列表数据(从您的联接中)并在 C# 中对它们进行分组
-
这其实是个不错的主意,我想这就是我要做的。
-
我会说动态创建查询是最好的选择,但根据 X 和 Y 的类型,您可以像
X + ' ' + Y IN @Combined那样组合它们,然后@Combined将是stuff.SelectMany(i => i.SomSubType.Select(j => i.X + " " + j.Y))但那可能会导致查询效率低下。 -
这是一个有趣的想法,但是 - 我的 id 是 int 并且将其转换为字符串可能会以不好的方式影响性能 - 至于创建动态查询 - 它可能比 @shyju 的选项更昂贵
标签: c# sql sql-server dapper