如何使用SQL之类的“IN”在DataTable上运行Linq并返回DataTable C#?

时间:2018-03-15 19:55:38

标签: c# wpf linq

我正在尝试从DataTable中提取特定的错误行:

在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

指定的演员表无效。

我对此没有太多经验。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

where 子句中,您试图将int(字段值)等于List<int>对象 - 当然会尝试强制转换然后失败。相反,请尝试以下方法:

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