如何使用数组筛选器填充.NET数据集

本文关键字:填充 NET 数据集 筛选 何使用 数组 | 更新日期: 2023-09-27 18:25:45

我想使用条件数组的过滤器来填充.NET数据集。数据集太大,无法加载并在加载后进行筛选。在C#中,填充看起来像:

List<int> customerIDs;
...
myAdapter.FillByCustomerIDs(customerIDs);

这将生成SQL子句

  WHERE CustomerID IN (x,x,x)

其中x,x,x来自customerID数组。

我找不到任何方法将此类型的筛选器传递给TableAdapter查询配置向导。

如何使用数组筛选器填充.NET数据集

在SQL中创建一个函数(请注意,@s参数的长度为1024,您可能需要增加它):

CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(1024))
RETURNS table
AS
RETURN (
    WITH Pieces(pn, start, stop) AS (
      SELECT 1, 1, CHARINDEX(@sep, @s)
      UNION ALL
      SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
      FROM Pieces
      WHERE stop > 0
    )
    SELECT 
        CAST(SUBSTRING(@s, start, 
            CASE 
                WHEN stop > 0 THEN stop-start 
                ELSE 512 
            END) as int) AS s
    FROM Pieces
  )
  GO

和一个存储过程:

CREATE PROCEDURE [dbo].[GetCustomerIds]
    @ids nvarchar(max),
    @sep char(1)
AS
    SELECT * 
    FROM Customers 
    WHERE CustomerId in 
        (SELECT s FROM dbo.Split(@sep,@ids))
RETURN 0

TableAdapter查询配置向导中,将FillByCustomerIds命令绑定到上述存储过程。现在,您可能有以下用法:

List<int> customerIDs = new List<int>() { 1, 2, 3, 4 };
myAdapter
    .FillByCustomerIds(dt, 
    customerIDs.Aggregate<int, string>("", 
        (s, i) => s + i.ToString() + ","), ",");