2017-09-15 52 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; } 
}