C# 基于相同ID筛选数据

C# 基于相同ID筛选数据,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有一个模型班 public class Model { public string name { get; set; } public string files { get; set; } } 我有一个控制器类,它将数据库中的数据填充到此模型中 List<Model> model = new List<Model>(); while (reader.Read()){ var om = new Model();

我有一个模型班

public class Model
  {
    public string name { get; set; }
    public string files { get; set; }
   }
我有一个控制器类,它将数据库中的数据填充到此模型中

 List<Model> model = new List<Model>();    
 while (reader.Read()){
     var om = new Model();

     if (reader != null)
         {
          om.name = reader.GetString(0);
          om.files = reader.GetString(1);
          model.Add(om)               
   }
改变你的模式

public class Model
{
   public string name { get; set; }
   public IList<string> files { get; set; }
}

这可能适合您:

var grouped = model.GroupBy(m => m.name).ToArray();
这将创建一个分组类型为IGrouping[]的对象,IGrouping的数组。。。 .ToArray是可选的,如果删除它,您将获得IEnumerable,但不要让嵌套的内容吓到您

原始列表中的项目按名称分组,因此组中的每个元素都具有相同的键属性

要打印结果,例如:

foreach(var group in grouped)
{
    Console.WriteLine($"Printing group: {group.Key}");
    foreach(var model in group)
    {
        Console.WriteLine($"\tName: {model.name}, File: {model.file}");
    }
}
请注意,组中的每个元素都是模型对象的集合


使用调试器查看该结构的外观,如果需要更多帮助,请询问…

是否尝试从列表模型中删除重复项…?查看Linqs GroupBy子句…我不想删除重复项。我想基于相同的名称进行分组。我删除了对ASP.Net的所有引用,因为它们不相关。名字相似的文件的含义不清楚。首先,文件中有什么?典型模型的内容是什么样的?@Gert Arnold一个用户可能有几个文件名。例如,Bob\c\users\Bob\file.txt、Bob\d\tester.csv、John\c\users\John\apple.txt。我想把所有的Bobs文件和所有的Johns文件合并在一起。你如何在模型中查看这些对?模型{}中的foreachvar行如何组合,我不确定我是否理解此部分:ifmodels.Containsname models[name].files+=files;你能进一步解释一下这个部分吗?是的,我也不明白你说的联合收割机是什么意思。但现在我想我明白了,你想在那里保存一份文件列表。我会更新我的例子在这种情况下,请标记一个作为回答:谢谢。
var peopleFileLists = models.Select(x => x.Value).ToList();
foreach(var person in peopleFileLists)
{
   foreach(var file in person.files)
     Console.WriteLine(person.name + "-" + file);
}
var grouped = model.GroupBy(m => m.name).ToArray();
foreach(var group in grouped)
{
    Console.WriteLine($"Printing group: {group.Key}");
    foreach(var model in group)
    {
        Console.WriteLine($"\tName: {model.name}, File: {model.file}");
    }
}