Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用类似于'IN'的SQL在DataTable上运行Linq并返回DataTable C?_C#_Wpf_Linq - Fatal编程技术网

C# 如何使用类似于'IN'的SQL在DataTable上运行Linq并返回DataTable C?

C# 如何使用类似于'IN'的SQL在DataTable上运行Linq并返回DataTable C?,c#,wpf,linq,C#,Wpf,Linq,我试图从数据表中提取特定的错误行: 在SQL中,这是我的想法: SELECT * FROM [Main].[tableData] AS [D] WHERE [D].[Row Number] IN ( -- List<int> errorLineNumbers Here ) 这是我的C: DataTable mainDataTable = GetData(); List<int> errorLineNumbers errorLineNumbers = GerErro

我试图从数据表中提取特定的错误行:

在SQL中,这是我的想法:

SELECT 
*
FROM [Main].[tableData] AS [D] 
WHERE [D].[Row Number] IN (
-- List<int> errorLineNumbers Here
)
这是我的C:

DataTable mainDataTable = GetData();

List<int> errorLineNumbers errorLineNumbers = GerErrorLineNumbers(mainDataTable);

// This Crashes
DataTable errorDataTable = (from main in mainDataTable.AsEnumerable()
                            where main.Field<int>("Row Number").Equals(errorLineNumbers)
                            select main).CopyToDataTable<DataRow>();
这是一个例外:InvalidCastException

指定的强制转换无效

我在这方面没有太多经验。如果有任何帮助,我们将不胜感激。

在where子句中,您试图将字段值的int值等于列表对象-当然,将尝试强制转换,然后失败。相反,请尝试以下操作:

DataTable errorDataTable = (from main in mainDataTable.AsEnumerable()
                            where errorLineNumbers.Contains(main.Field<int>("Row Number"))
                            select main).CopyToDataTable<DataRow>();

在c语言中,最好不要直接处理DataTable。将数据表示为一个类,您可以对该类的集合执行LINQ查询。使用DataTable和DataRow涉及大量繁琐的空检查和强制转换。其中errorLineNumbers.Containsmain.FieldRow Number我希望在多个不同的数据表上运行此代码。如果我要在类中表示我的数据。我必须创建多个不同的类/模型来匹配每个表,或者求助于一些动态类创建;这是我宁愿避免的。@mjwills是的,当我尝试你的评论时;我意识到数据表中的行号列是字符串类型。当我把它改成int并尝试你的代码时。它工作得很好。非常感谢你的帮助。把它作为答案贴出来,这样我就可以标记它了。可能的副本:谢谢你的帮助@mjwills也发表了同样的评论。另外:我意识到数据表中的行号列是字符串类型。所以我把它改成int,它工作得很好。