Reputation: 139
I want to make an MVC C# List with unique values in it. Here is the scenario. My List is like this:
List A
ItemNo FileName
001 => A.txt
001 => B.txt
002 => A.txt
002 => B.txt
003 => A.txt
I want to make it a new List like,
List B
ItemNo FileName
001 => A.txt, B.txt
002 => A.txt, B.txt
003 => A.txt
Is there any way that I can make it workable?
Upvotes: 3
Views: 231
Reputation: 75326
You can use LINQ with GroupBy, assume you have class:
class Item
{
public string ItemNo { get; set; }
public string FileName { get; set; }
}
var result = list.GroupBy(item => item.ItemNo)
.Select(g => new Item
{
ItemNo = g.Key,
FileName = string.Join(", ", g.Select(s => s.FileName))
});
Upvotes: 4
Reputation: 16812
Does this help?
Method
var result = new Dictionary<string, string>();
foreach (var fileAssistant in duplicateList)
{
if (result.ContainsKey(fileAssistant.ItemNo))
{
result[fileAssistant.ItemNo] = string.Format("{0}, {1}", result[fileAssistant.ItemNo], fileAssistant.FileName);
}
else
{
result.Add(fileAssistant.ItemNo, fileAssistant.FileName);
}
}
Setup
var duplicateList = new List<FileAssistant>(new[]
{
new FileAssistant("001", "A.txt"),
new FileAssistant("001", "B.txt"),
new FileAssistant("002", "A.txt"),
new FileAssistant("002", "B.txt"),
new FileAssistant("003", "A.txt")
});
File Assistant class
public class FileAssistant
{
public FileAssistant() { }
public FileAssistant(string itemNo, string fileName)
{
ItemNo = itemNo;
FileName = fileName;
}
public string ItemNo { get; set; }
public string FileName { get; set; }
}
Upvotes: 1