2
我对Dapper有点新,并且正试图找到一种干净的方式将过滤器参数传递给具有多个属性的集合的SQL Query。如何使用具有多个属性的集合过滤Dapper?
我的收藏是这样的:
[{
Prop1: 'A Value 1',
Prop2: 'B Value 1'
},
{
Prop1: 'A Value 2',
Prop2: 'B Value 2'
}]
应导致SQL查询看起来像这样其中:
select *
from SampleTable
where
([ColumnA]='A Value 1' and [ColumnB]='B Value 1')
or ([ColumnA]='A Value 2' and [ColumnB]='B Value 2')
注:事情是什么如下所示不会起作用,因为这两个属性PropA和PropB需要一起过滤。
string query = @"select *
from SampleTable
where [ColumnA] in (@PropA_Value)
and [ColumnB] in (@PropB_Value)"
con.Query<T>(query, new{PropA_Value = PropA,PropB_Value = PropB}).AsList();
谢谢,我觉得这真的很有帮助。虽然不是Dapper内置的解决方案,但这绝对是可重复使用的,也是一个不错的解决方案。我认为要解决这个问题的另一件事是检查SQL注入,因为我们没有使用传递参数的默认Dapper方法。 – m0g
是的,我的解决方案只是展示如何构建过滤器字符串,而不考虑SQL注入等其他功能。 – Yared
此链接可能也有帮助; https://github.com/tmsmith/Dapper-Extensions/wiki/Predicates 请参阅'多个复合谓词(谓词组)'部分 – Yared