我使用存储过程填充DataTable。但是,在一个特定的实例中,我需要根据结果集中不是存储过程提供的参数之一的成员值的值,将这些结果过滤到它们通常的子集。
ISTM应该可以过滤DataTable,为这个单一的场景分配自己的一个子集。
我不知道我需要什么样的代码,但我认为伪代码会是这样的(" dtUsage"是一个DataTable):
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);
}
答案 0 :(得分:1)
我猜你可以使用这样的东西。
dtUsage = dtUsage.Where(data => data.MemberNo == '0451' || data.MemberNo == '050' || data.MemberNo == '067')
编辑:或许这个?
var results = from row in dtUsage.AsEnumerable()
where (row.Field<string>("MemberNo") == "0451" ||
row.Field<string>("MemberNo") == "050" ||
row.Field<string>("MemberNo") == "067")
select row;
答案 1 :(得分:1)
您可能需要以下内容:
var result = from x in dtUsage.AsEnumerable()
where new string[]{"0451", "050", "067"}.Contains(x.Field<string>("MemberNo"))
select x;