C# 如何使用类似于'IN'的SQL在DataTable上运行Linq并返回DataTable C?
我试图从数据表中提取特定的错误行: 在SQL中,这是我的想法: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
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,它工作得很好。