gpt4 book ai didi

c# - 如何根据值列表选择行

转载 作者:行者123 更新时间:2023-11-30 16:13:58 26 4
gpt4 key购买 nike

我有一个包含 +250K 行的表。

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

我试过这种方法: SQL Select where values in List<string>

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

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

但这感觉不对...

有什么建议吗?

最佳答案

But sometimes this fails because my query gets too long.

看来您已经为所链接的问题选择了可接受的答案,即 this one :

String query = "select * from table where RecordId in ({0});";
String formatted = String.Format(query, String.Join(",", list.ToArray()));

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

幸运的是,这个问题还有另一个没有这个问题的答案 - 即 this one :

IEnumerable<TableRow> query =
from t in db.Table
where RecordList.Any(r => t.RecordId == r)
select t;

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

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

关于c# - 如何根据值列表选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21061383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com