如何将具有键值对的对象列表发送到SQL查询中?

问题描述 投票:0回答:1

因此,起初,我使用了与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方面的佼佼者,所以我不确定如何准确地做到这一点。我做了很多的谷歌搜索,我只能找到例子...

c# sql dapper
1个回答
0
投票

您的代码不是存储过程。下面的代码只是示例:

{nameof(paramz.Field)}
© www.soinside.com 2019 - 2024. All rights reserved.