C# 使用DataTable的一个查询,然后应用筛选器
我对foreach子句进行了两次查询,它们使用过滤器从datatable返回数据:C# 使用DataTable的一个查询,然后应用筛选器,c#,.net,linq,datatable,C#,.net,Linq,Datatable,我对foreach子句进行了两次查询,它们使用过滤器从datatable返回数据: foreach (var currentDesignItem in designItemList.Select($"[Design Name] = '{designName}' AND [Project Number] = {legacyKey} AND [DesignTypeName] <> 'Change Order'")) 正如您所看到的,它是相同的查询,但有一个不同的过滤器和[Desig
foreach (var currentDesignItem in designItemList.Select($"[Design Name] = '{designName}' AND [Project Number] = {legacyKey} AND [DesignTypeName] <> 'Change Order'"))
正如您所看到的,它是相同的查询,但有一个不同的过滤器和[DesignTypeName]=“变更单”。
所以我不想做两次查询,我试着
DataRow[] dtList = designItemList.Select($"[Design Name] = '{designName}' AND [Project Number] = {legacyKey}");
然后尝试在foreach中筛选为:
foreach (var currentDesignItem in dtList.Select("[DesignTypeName] <> 'Change Order'"))
foreach(dtList中的var currentDesignItem。选择(“[DesignTypeName]‘变更单’”)
但我有一个错误:
方法“Enumerable.Select(IEnumerable,Func)”的类型参数不能为空
从用法推断。尝试指定类型参数
明确地说
您的dtList.Select(…)
是针对DataRow[]
(此时不是DataTable
)的,因此您可以使用
var filtered = dr.Select(r => r["DesignTypeName"].ToString() != "Change Order");
编辑
上面应该使用
。Where
而不是。显然,选择。设计项目列表。选择是一种数据表方法,dtList。选择是一种完全不同的方法:可枚举。Where
。如果我现在这样做,我如何访问列,在此之后,我有如下内容:var designItemName=currentDesignItem[“designItemName”]作为字符串代码>,但现在如何访问?因为我遇到了一个错误:无法将带[]的索引应用于“bool”类型的表达式。请参见答案中的编辑。其中
是过滤器,选择
是投影。很抱歉。
var filtered = dr.Select(r => r["DesignTypeName"].ToString() != "Change Order");