Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从表列中查找列表中的每个字符串_C#_Sql - Fatal编程技术网

C# 从表列中查找列表中的每个字符串

C# 从表列中查找列表中的每个字符串,c#,sql,C#,Sql,我有一张大约有一百万行的桌子。其中一列是字符串,我们称之为列a 现在我需要处理一个大约1000个字符串的列表L,主要是一个或两个单词,我需要找到表中的所有记录,其中列a包含列表L中1000个字符串中的一个 我能想到的唯一方法是使用L中的每个字符串进行全表扫描,查找该字符串是否是每行内容a列的子字符串。但这将是O(n2),对于一百万行,这将需要很长的时间 有更好的办法吗?无论是在SQL还是在C#code?我建议研究一下,它不会减少您必须执行的操作的数量,但会提高性能。假设您使用SQL server

我有一张大约有一百万行的桌子。其中一列是字符串,我们称之为列a

现在我需要处理一个大约1000个字符串的列表L,主要是一个或两个单词,我需要找到表中的所有记录,其中列a包含列表L中1000个字符串中的一个

我能想到的唯一方法是使用L中的每个字符串进行全表扫描,查找该字符串是否是每行内容a列的子字符串。但这将是O(n2),对于一百万行,这将需要很长的时间


有更好的办法吗?无论是在SQL还是在C#code?

我建议研究一下,它不会减少您必须执行的操作的数量,但会提高性能。

假设您使用SQL server(您应该始终使用相关标记来指定rdbms),
您可以从
列表中创建
数据表
,并将其作为存储过程发送给存储过程

在存储过程中,您可以使用该表值参数与数据库_table.col(table_parameter.value)(使用)上的表的简单联接。
当然,如果你像评论中所建议的那样创建一个新的行,事情会进展得快得多。现在一百万行是一个相对较小的数字。您应该能够将A列中的所有字符串连同表的主键一起拉入内存,并使用由1000个字符串组成的很长正则表达式执行正则表达式搜索:

var regex = new Regex("string one|string two|string three|...|string one thousand");

由于正则表达式被编译成最终的自动机,所以字符串的扫描时间会相当快。过滤完成后,收集ID,并使用它们从表中查询整行。

最好的方法是使用linq。假设你有你的清单

List<string> test = new List<string>{"aaa","ddd","ddsc"};

包含列A的表在数据库中,列表L在您的C#程序中,我想?听起来您需要A。请告诉我您是否需要对此进行更多解释。我更熟悉此选项,因此我选择此作为问题的答案。但我相信其他的选择也很好。谢谢各位。
var match = YourTable.Where (t=> test.Contains(t.YourFieldName);