因此,起初,我使用了与Dapper结合使用的SQL查询集。我仍然不是SQL方面的佼佼者,所以我不确定如何准确地做到这一点。我做了很多的谷歌搜索,我只能找到关于如何传递值集合的示例,但没有关于带有键值对的对象集合的示例。 (使用一组值时,我已经或多或少地知道要使用WHERE DBField IN inputList
。)>
我要传递的对象列表中充满了此类:
public class InputClass { public string ClassFieldOne {get;set;} public string ClassFieldTwo {get;set;} }
这是Dapper的SQL函数:
public async Task<IEnumerable<OutputClass>> LoadStuffFromMSSQL(IEnumerable<InputClass> inputList) { var paramz = new { InputList = inputList }; var sql = $@" SELECT ONE.Field ONE.Field1 TWO.Field2 FROM dbo.FIRST ONE JOIN dbo.SECOND TWO ON ONE.Field3 = TWO.Field3 AND ONE.Field4 = TWO.Field4 AND ONE.Field5 = TWO.Field5 WHERE ????"; using (var conn = new SqlConnection(configuration.ConnectionString)) { return await conn.QueryAsync<OutputClass>(sql, paramz); } }
如果在WHERE子句中有任何混淆,我将paramz对象用于防止SQL注入,]
关键是必须同时发送集合中每个对象中的两个键值对,我不想做一个迭代循环,为集合中的每个项目创建一个新的连接,因为那太愚蠢了。必须有一种方法可以在此用例中使用WHERE ___ IN ____子句,但我只是不知道它是什么。
我认为我需要使用某种子查询,但是我似乎找不到任何可以直接指定它的东西。有人可以指出一些文档吗?
因此,起初,我使用了与Dapper结合使用的SQL查询集。我仍然不是SQL方面的佼佼者,所以我不确定如何准确地做到这一点。我做了很多的谷歌搜索,我只能找到例子...
您的代码不是存储过程。下面的代码只是示例:
{nameof(paramz.Field)}