如何制作包含唯一条目的列表?

时间:2012-08-18 07:24:03

标签: c# asp.net-mvc-3 list

我想制作一个带有唯一值的MVC C#List。这是场景。我的清单是这样的:

列出A

ItemNo       FileName 

001      =>   A.txt
001      =>   B.txt
002      =>   A.txt
002      =>   B.txt
003      =>   A.txt

我想把它作为一个新的列表,如

列表B

ItemNo       FileName 

001      =>   A.txt, B.txt
002      =>   A.txt, B.txt
003      =>   A.txt

有什么方法可以让它变得可行吗?

2 个答案:

答案 0 :(得分:4)

您可以将LINQ与GroupBy一起使用,假设您有课程:

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))
                   });

答案 1 :(得分:1)

这有帮助吗?

方式

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);
    }
}

<强>设置

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")
                                        });

文件助理类

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; }
}