【问题标题】:Use one query of DataTable then apply filter使用 DataTable 的一个查询然后应用过滤器
【发布时间】:2025-11-25 05:50:01
【问题描述】:

我对 foreach 子句有两个查询,它们使用过滤器从数据表中返回数据:

 foreach (var currentDesignItem in designItemList.Select($"[Design Name] = '{designName}' AND [Project Number] = {legacyKey}  AND [DesignTypeName] <> 'Change Order'"))

 foreach (var item in designItemList.Select($"[Design Name] = '{designName}' AND [Project Number] = {legacyKey} AND [DesignTypeName] = 'Change Order'"))

如您所见,它是相同的查询,但过滤器不同 AND [DesignTypeName] = 'Change Order'.

所以我不想做两次查询,我试试

 DataRow[] dtList = designItemList.Select($"[Design Name] = '{designName}' AND [Project Number] = {legacyKey}");

然后尝试在foreach中过滤为:

foreach (var currentDesignItem in dtList.Select("[DesignTypeName] <> 'Change Order'"))

但我收到一个错误:

方法 'Enumerable.Select(IEnumerable, Func)' 的类型参数不能 从用法推断。尝试指定类型参数 明确的。

【问题讨论】:

  • designItemList.SelectDataTable 方法,dtList.Select 是完全不同的方法:Enumerable.Where

标签: c# .net linq datatable


【解决方案1】:

您的 dtList.Select(...)linqDataRow[](此时不是 DataTable),所以您使用类似

var filtered = dr.Select(r => r["DesignTypeName"].ToString() != "Change Order");

编辑

显然,上面应该使用.Where 而不是.Select

【讨论】:

  • 如果我现在这样做,我怎样才能访问列,在此之后我有这样的东西:var designItemName = currentDesignItem["DesignItemName"] as string;,但现在我怎样才能访问?因为我收到错误:无法将 [] 索引应用于“bool”类型的表达式
  • 查看答案中的编辑。 Where 是过滤器,Select 是投影。对此感到抱歉。