C# 数据表,使用linq

C# 数据表,使用linq,c#,linq,C#,Linq,我有一个12列的数据表。其中5个一起构成主键。我想使用linq查找重复的行,并在所有这些重复记录的列中指定值'DUP',最后一列就是为了这个目的而保留的。请帮忙。。 谢谢。根据主键获取不同的行,然后遍历数据表,为非不同的记录设置DUP,怎么样 要获得不同的记录,请尝试以下操作 DataView view = new DataView(yourtable); DataTable distinctTable = view.ToTable(true, "Column1", "Column2" ...)

我有一个12列的数据表。其中5个一起构成主键。我想使用linq查找重复的行,并在所有这些重复记录的列中指定值'DUP',最后一列就是为了这个目的而保留的。请帮忙。。
谢谢。

根据主键获取不同的行,然后遍历数据表,为非不同的记录设置DUP,怎么样

要获得不同的记录,请尝试以下操作

DataView view = new DataView(yourtable);
DataTable distinctTable = view.ToTable(true, "Column1", "Column2" ...);

请告诉我此解决方案是否适合您。

以下是使用Linq的完整示例:

我只用了4列就完成了这个示例,根据您的案例进行调整应该很简单

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("col1", typeof(int)));
dt.Columns.Add(new DataColumn("col2", typeof(int)));
dt.Columns.Add(new DataColumn("col3", typeof(int)));
dt.Columns.Add(new DataColumn("col4", typeof(bool)));

var distinctRows = from r in dt.AsEnumerable()
                   group r by new { col1=r["col1"], col2=r["col2"], col3=r["col3"]}
                   into g
                   select g.First();

foreach (var distinctRow in distinctRows)
{
   distinctRow["col4"] = "dup";
}
如果您更喜欢方法链语法:

var distinctRows = dt.AsEnumerable().GroupBy(r => new {col1 = r["col1"], col2 = r["col2"], col3 = r["col3"]})
                                    .Select(g => g.First());

你自己还没试过?DataTable和Select方法有什么问题吗?你为什么在标题中说Linq?我也通过遍历datatable和所有数据表做了同样的事情,但我需要使用Linq来完成这项工作。@sanuj:你必须表现出一些努力。我们不是一个编程服务。如果您对LINQ一无所知,请仔细阅读它,尝试一些东西,如果它不起作用,请提出一个关于代码为什么不起作用的问题。我们很乐意提供帮助。但我需要用linq来做这件事。为什么?sinde,当某人感到完全无助时,他/她会寻求帮助。这并不意味着这个人什么都没试过。我尝试了一些linq代码,但它不起作用。我无法在这里发布所有这些试用。var duplicates=dt.AsEnumerable.GroupByr=>new{rw=>rw[colmn1],rw=>rw[colmn2],rw=>rw[colmn3],rw=>rw[colmn4],rw=>rw[colmn5]}。其中gr=>gr.Count>1.选择g=>g.Key;像这样的。按部分分组显示错误。我记不起在那之后我试过的所有代码。感谢smiling4ever。这不使用LINQ。非常感谢Alberto。为了完整性,我添加了方法链语法