我认为您可以这样做来获取要比较的字符串列表:
using System.Linq;
namespace ExampleNamespase
{
public class SimpleClass
{
private class TypeExample
{
public string Property { get; }
}
private void CompareData(TypeExample[] exampleArray)
{
var items = string.Join(", ", exampleArray.Select(t => t.Property));
var sql = $"Select * from emp_detail where EState in ({items}) ";
}
}
}
或者如果你使用的是一个简单的字符串列表:
private void CompareData(string[] exampleArray)
{
var items = string.Join(", ", exampleArray);
var sql = $"Select * from emp_detail where EState in ({items}) ";
}
要防止注入,请使用 Dapper 库:
using System.Data;
using Dapper;
namespace ExampleNamespase
{
public class SimpleClass
{
private void CompareData(string[] exampleArray, IDbConnection connection)
{
var sql = "Select * from emp_detail where EState in @items ";
var result = connection.Query<YourTypeClass>(sql, new { items = exampleArray });
}
}
}
说明:
第一个示例使用 Linq 库使用 Select 方法检索对象的属性,并使用 string.Join 方法将结果列表连接成逗号分隔的字符串。
第二个例子演示了同样的方法,只是用了一个字符串数组,同样的 string.Join 方法用于连接。
在第三个例子中,使用 Dapper 库来执行请求,我认为应该首选这种方法,因为有助于避免 SQL 注入,也简化了与数据库的工作。要执行查询,我们可以传递一个对象列表,我们想要与数据库中的值进行比较,Dapper 将能够自行处理。我们只需要在请求中定义带有@符号的变量,并传递对象进行处理,该对象将具有相同名称的属性。
附:我为我的英语道歉))
更新:
试试这个:
private void CampareData(string[] exampleArray, IDbConnection connection)
{
var clearItems = exampleArray.Select(s => $"'{s}'").ToArray();
var sql = "Select * from emp_detail where EState in @items ";
var result = connection.Query<YourTypeClass>(sql, new { items = clearItems });
}
在这个变体中,我们将每个项目用 sql 使用的引号括起来,并且查询应该包含如下内容: ... in ('item1', 'item2' ...)