LINQ - 从表中删除不同的行

时间:2012-05-25 19:23:07

标签: .net linq

尝试从dt中选择不同的行,并将结果放回到相同的dt中。我认为这可以在一个声明中完成。这是我正在尝试的内容:

    dt = (DataTable)((from row in dt.AsEnumerable() select row.Field<string>("VNDR_ID")).Distinct().ToList());

我怎样才能做到这一点?感谢。

3 个答案:

答案 0 :(得分:1)

LINQ语句

(from row in dt.AsEnumerable() select row.Field<string>("VNDR_ID")).Distinct()

返回IEnumerable<string>而不是DataTable,因此投射会失败。

您是否有理由将结果放入另一个DataTable?我只是使用查询返回的IEnumerable,或者如果您希望立即评估查询,则将其转换为List<string> ToList()(以便您可以更改内容dt

答案 1 :(得分:1)

您无法将其强制转换为DataTable。 Linq将根据您的选择输出IEnumerable<string>。要将其加载到DataTable中,您必须:

  1. 创建一个DataTable
  2. 使用DataColumnCollection.Add Method (String, Type)
  3. 创建列
  4. 循环数据
  5. 使用DataRowCollection.Add Method (Object[])
  6. 为每个项目添加新行

答案 2 :(得分:1)

    dtSuplr = (from suplr in dtSuplr.AsEnumerable()
                   select suplr).Distinct().CopyToDataTable();