c# - 以 IN 作为 List<int> 的数据集和查询

标签 c# wpf dataset tableadapter

我的问题是我有带表的数据集,我想返回值

'where DocumentType IN (@list)'

,但@list就像:

string.Join(",",DocTypes.List1);

我尝试过像这样使用它 SELECT........ WHERE DocumentType IN (@list) (在 DataSet 表适配器向导中),但是当我执行 Fill 方法时,出现错误:

adapter1.Fill(ds.allDocuments, string.Join(",",DocTypes.List1);

参数 2 应该是 int,而不是 string。 声明在数据集中也不起作用..

有什么帮助吗?

最佳答案

您需要一个 Split 函数,这样就可以了:

WHERE
    ([DocumentType IN] IN
        (SELECT  Item
         FROM    dbo.Split(@list, ',') AS DocumentSplit)) 

这是表值函数的可能实现:

CREATE FUNCTION [dbo].[Split]
(
    @ItemList NVARCHAR(MAX), 
    @delimiter CHAR(1)
)
RETURNS @IDTable TABLE (Item VARCHAR(50))  
AS      

BEGIN    
    DECLARE @tempItemList NVARCHAR(MAX)
    SET @tempItemList = @ItemList

    DECLARE @i INT    
    DECLARE @Item NVARCHAR(4000)

    SET @tempItemList = REPLACE (@tempItemList, ' ', '')
    SET @i = CHARINDEX(@delimiter, @tempItemList)

    WHILE (LEN(@tempItemList) > 0)
    BEGIN
        IF @i = 0
            SET @Item = @tempItemList
        ELSE
            SET @Item = LEFT(@tempItemList, @i - 1)
        INSERT INTO @IDTable(Item) VALUES(@Item)
        IF @i = 0
            SET @tempItemList = ''
        ELSE
            SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
        SET @i = CHARINDEX(@delimiter, @tempItemList)
    END 
    RETURN
END  

也许您需要在表适配器的参数中手动确保它的DbType 是字符串:

enter image description here

关于c# - 以 IN 作为 List<int> 的数据集和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14318524/

相关文章:

c# - SQL中的位逻辑

c# - 正则表达式使用 C# 保留未知长度字符串的最后 4 个字符

c# - 使用 WindowsXamlHost Overlay 托管 CaptureElement

c# - 检测 WPF Canvas 上两个矩形之间的碰撞

c# - 与 const 字段相比,在 web.config 中存储值是否有性能损失?

c# - 两个相同类型的对象的 InvalidCastException

wpf - 如何在 WPF 运行时更改边框或 userControl z 顺序?

dataset - iReport,如何打印不同表的字段

c# - 你能在可移植类库中使用数据集和数据表吗

C# 数据集 Access 数据库