System.Data.SQLite等效于SqlDbType.Structured?

时间:2013-12-26 14:11:37

标签: c# sqlite system.data.sqlite

在我正在处理的当前项目中,我经常有一个最多1000个(intstring)值的集合,我想在select语句中匹配(使用IN运营商)。该项目支持SQL Server和SQLite。

在SQL Server中,解决方案非常简单。 我创建了两种新类型:

CREATE TYPE IntegerList AS TABLE(IntValue INT NOT NULL);
CREATE TYPE StringList AS TABLE(StrValue VARCHAR(32) NOT NULL);

在我的C#代码中,我执行以下操作:

using (IDbCommand command = connection.CreateCommand())
{
  command.CommandText = someComplexSelectStatment + " AND T.Value IN (SELECT StrValue FROM @Values)";
  SqlParameter parameter = command.CreateParameter() as SqlParameter;
  parameter.ParameterName = "@Values";
  parameter.Value = data;
  parameter.SqlDbType = SqlDbType.Structured;
  parameter.TypeName = "dbo.StringList";
  command.Parameters.Add(parameter);
  // use an IDataReader to retrieve the results
}

数据是DataTable的{​​{1}}。我编写了自己的通用DbDataReader,它可以使用DbDataReader作为来源。

在SQLite中是否有相同的功能?我看到的唯一解决方案(除了将数据插入临时表之外)将创建一个巨大的字符串,如:IEnumerable<T>。对我来说,这似乎不是一个非常有效的解决方案。

我不能在没有IN运算符的情况下执行select语句(并在集合上过滤结果),因为结果将包含太多结果(最多一百万条记录)。

马克

0 个答案:

没有答案