【发布时间】:2017-01-24 19:08:40
【问题描述】:
我使用存储过程填充数据表。但是,在一个特定情况下,我需要根据结果集中的成员值的值(不是存储过程提供的参数之一)将这些结果过滤到它们通常的子集。
ISTM 认为过滤 DataTable 应该是可行的,为这个单一的场景分配它自己的一个子集。
我不知道我需要什么确切的代码,但我认为伪代码应该是这样的(“dtUsage”是一个数据表):
dtUsage = dtUsage.Rows Where MemberNo in ["0451", "050", "067"];
我可以暂时使用另一个 DataTable,并循环遍历第一个,有条件地向第二个添加行,但我确信使用 LINQ 有更优雅的方法来做到这一点。
更新
根据我看到的here,这样的事情可能会奏效:
DataRow[] result = dtUsage.Select("MemberNo IN [\"103\",\"016\",\"04501\"]");
...但是如何将结果分配给数据表?
这都不是:
dtUsage = result;
...也不是这个:
dtUsage.Rows = result;
...编译。这也不是:
DataTable dt = new DataTable();
foreach (DataRow drp in result)
{
dt.Add(drp);
}
【问题讨论】:
-
datatable.defaultview.rowfilter
-
回复:更新:每个数据表都带有一个隐藏在 defaultview 属性中的免费内置 DataView,它允许在不构建新查询或表的情况下进行实际过滤