我正在 Asp.net c#中编写代码,以从 SQL Server 数据库中选择一些值。 我想获取表中不包含字符串数组项的所有值。
详细地说,我有一个名为Notifications的表,其中包含2列,'Text'和'Date'。我也有一个字符串数组。
我想获得字符串数组中不存在的所有文本和日期
感谢大家
答案 0 :(得分:0)
首先,您需要将字符串数组转换为可以传递到查询中的逗号分隔列表。然后让您的查询过滤我的任何记录,其中Text列的值在该列表中:
public string GetNotifications(string[] texts)
{
// Create a single string with all values from the texts array.
// Ex: 'value1','value2','value3'
// There are many ways to do this; here's one way using string.Join and LINQ:
var textsAsSingleString = string.Join(",", texts
.Select(x => "'" + x.Replace("'", "''") + "'")
.ToArray());
// Create your query with a WHERE clause that checks against your list
var query = "SELECT Text, Date " +
"FROM Notifications " +
"WHERE Text NOT IN (" + textsAsSingleString + ")";
// Execute the query
SqlCommand cmd = new SqlCommand(query, con);
...
}
现在,这应该适用于texts
数组中的一些值,但如果该数组变得非常大(多大程度取决于许多环境因素),性能可能会开始降低。但是,除非你告诉我,否则我会认为这个清单不是很长。
编辑:如果texts
中的任何字符串包含单引号,则会失败。您需要使用两个单引号替换任何单个单引号。我已经更新了上面的示例,通过在Replace("'", "''")
中的每个字符串上调用texts
,然后将其添加到逗号分隔的列表/字符串中来执行此操作。
答案 1 :(得分:0)
我不确定您连接到数据库的方式,但您可以随时使用:
如果使用Linq:
string sParms = String.Join(",", saParams.Select(str => "'" + str + "'").ToArray());
然后您可以在where子句中使用sParms
。
如果不使用Linq:
string[] saParams = new string[3] { "String1", "String2", "String3" };
StringBuilder sbParams = new StringBuilder();
foreach(string sStr in saParams)
{
if (sbParams.Length > 0)
sbParams.Append(",");
sbParams.Append("'" + sStr + "'");
}
然后您可以在where子句中使用sbParams.ToString()
。