2017-09-15 74 views
3

我有以下数据表:数据表:如何得到重复和复制的行数

Article Price 
ART1  99 
ART2  100 
ART3  150 
ART2  90 
ART1  50 

现在,我应该创建一个新的DataTable与重复的那样

Article Duplicates 
ART1   1,5 
ART2   2,4   
ART3   
ART2   2,4 
ART1   1,5 
位置

所以关键是“文章”栏目

,我发现只有约约发现实例是重复值多少次与LINQ重复的值。

我该如何用linq实现类似的功能?

谢谢

回答

1

您可以使用此方法:

var articleLookup = yourTable.AsEnumerable() 
    .Select((row, index) => new { Row = row, RowNum = index + 1 }) 
    .ToLookup(x=> x.Row.Field<string>("Article")); 

DataTable dupTable = new DataTable(); 
dupTable.Columns.Add("Article"); 
dupTable.Columns.Add("Duplicates"); 

foreach(DataRow row in yourTable.Rows) 
{ 
    DataRow addedRow = dupTable.Rows.Add(); 
    string article = row.Field<string>("Article"); 
    var dupRowNumList = articleLookup[article].Select(x => x.RowNum).ToList(); 
    string dupRowNumText = dupRowNumList.Count == 1 ? "" : String.Join(",", dupRowNumList); 
    addedRow.SetField("Article", article); 
    addedRow.SetField("Duplicates", dupRowNumText); 
} 
1

您好我试图与创建列表的对象您的具体要求。我可以得到你需要的预期结果。重要的是你有Linq查询会给你结果。 这里是主类

class Program 
{ 
    static void Main(string[] args) 
    { 

     List<data> datas = new List<data>(); 

     datas.Add(new data() {atricle = "ART1", price = 99}); 
     datas.Add(new data() { atricle = "ART2", price = 100 }); 
     datas.Add(new data() { atricle = "ART3", price = 150 }); 
     datas.Add(new data() { atricle = "ART2", price = 90 }); 
     datas.Add(new data() { atricle = "ART1", price = 50 }); 

     Console.WriteLine($"Atricle | Duplicates"); 
     foreach (data templist in datas) 
     { 
      var duplicates = datas.Select((data, index) => new {atricle = data.atricle, Index = index + 1}) 
       .Where(x => x.atricle == templist.atricle) 
       .GroupBy(pair => pair.atricle) 
       .Where(g => g.Count() > 1) 
       .Select(grp => grp.Select(g => g.Index.ToString()).ToArray()) 
       .ToArray(); 
      string joined = duplicates.Length>0 ? string.Join(",", duplicates[0].ToList()):""; 
      Console.WriteLine($"{templist.atricle} | {joined}");    
     } 


     Console.ReadLine(); 

    } 
} 

下面是数据模型类

public class data{ 
public string atricle { get; set; } 
    public int price { get; set; } 
}