C# 如何基于值列表选择行

C# 如何基于值列表选择行,c#,sql,C#,Sql,我有一张+25000行的桌子 我只需要获取与字符串值列表中的任何字符串匹配的行,这可以是从几个到+100个值的任意值 我尝试过这种方法: 但有时这会失败,因为我的查询太长了 目前,我正在获取整个表,然后在LINQ中处理它 但这感觉不对 有什么建议吗?您可以将您的100多个值添加到临时表中,然后从您的表中查询SELECT*,其中您的值位于SELECT YourValue FROM TempValues中 但有时这会失败,因为我的查询太长了 您似乎已经选择了您链接的问题的公认答案,即: 这种方法的

我有一张+25000行的桌子

我只需要获取与字符串值列表中的任何字符串匹配的行,这可以是从几个到+100个值的任意值

我尝试过这种方法:

但有时这会失败,因为我的查询太长了

目前,我正在获取整个表,然后在LINQ中处理它

但这感觉不对


有什么建议吗?

您可以将您的100多个值添加到临时表中,然后从您的表中查询SELECT*,其中您的值位于SELECT YourValue FROM TempValues中

但有时这会失败,因为我的查询太长了

您似乎已经选择了您链接的问题的公认答案,即:

这种方法的一个缺点是,查询的增长与列表中所有字符串的总长度成比例,因此,如果列表中有许多非常长的字符串,则有可能超过允许的查询长度

幸运的是,这个问题还有一个没有这个问题的答案,那就是:

它使用一种生成参数化查询的方法,而不是将字符串值直接插入查询字符串中。现在,长度只取决于列表中项目的数量,而不取决于它们的长度。因此,如果此查询适用于最大长度为100项左右的列表,则无论列表中的字符串总长度如何,它都将继续工作


这种方法确实有一个限制——根据RDBMS,in列表中的项目总数可能会被限制。但是,默认上限非常高—Oracle大约为1000,MS SQL Server大约为2000,因此您对100个左右项目的查询应该远远低于此限制。

匹配所有字符串或其中任何一个?@gabykag.Petrioli其中任何一个都会相应地更新问题……确切地说,我已经尝试了字符串连接解决方案。我会试试你的解决方案,谢谢!很好的建议,但不幸的是我不能在数据库中添加/编辑表。
String query = "select * from table where RecordId in ({0});";
String formatted = String.Format(query, String.Join(",", list.ToArray()));
IEnumerable<TableRow> query =
  from t in db.Table
  where RecordList.Any(r => t.RecordId == r)
  select t;