【问题标题】:Get List of objects with duplicates C# linq获取具有重复项的对象列表 C# linq
【发布时间】:2015-11-06 09:12:19
【问题描述】:

我有一个这样的对象列表:-

List<EmployeeModel> mList = new List<EmployeeModel>();
        mList.Add(new EmployeeModel { Place = "place1", Time = time1, EmployeeName = "abc" });
        mList.Add(new EmployeeModel { Place = "place2", Time = time2, EmployeeName = "abc" });
        mList.Add(new EmployeeModel { Place = "place3", Time = time3, EmployeeName = "abc" });
        mList.Add(new EmployeeModel { Place = "place1", Time = time4, EmployeeName = "abc" });
        mList.Add(new EmployeeModel { Place = "place2", Time = time5, EmployeeName = "pqr" });
        mList.Add(new EmployeeModel { Place = "place3", Time = time6, EmployeeName = "xyz" });
        mList.Add(new EmployeeModel { Place = "place1", Time = time7, EmployeeName = "pqr" });
        mList.Add(new EmployeeModel { Place = "place2", Time = time8, EmployeeName = "xyz" });
        mList.Add(new EmployeeModel { Place = "place3", Time = time9, EmployeeName = "abc" });

我想首先对列表进行排序,以根据 EmployeeName 查找重复项。我这样做如下:-

var dupes = mList.GroupBy(x => new { x.EmployeeName }).Where(x => x.Skip(1).Any());

这给了我一组按 EmployeeName 分组的值。

我有两个字符串,即。 placeStringtimeString,我想根据EmployeeName值组中的不同值(TimePlace)填写。

类似这样的:-

EmployeeName - abc
placeString:place1 timeString:time4
placeString:place1 timeString:time2
placeString:place1 timeString:time3
EmployeeName - pqr
placeString:place2 timeString:time5
placeString:place1 timeString:time7

EmployeeName - xyz
placeString:place3 timeString:time6
placeString:place2 timeString:time8

我该如何解决这个问题?任何帮助将不胜感激。

【问题讨论】:

  • 这和排序有什么关系?
  • 如果你在 mvc 中做,你可以尝试添加一个包含员工姓名和地点和时间列表的列表。
  • 你不必创建匿名类型。 new { x.EmployeeName } 改成x.EmployeeName
  • 还有Where(x =&gt; x.Skip(1).Any())的逻辑是什么?这对我来说毫无意义。
  • @M.kazemAkhgary 如果你手里有一张桌子,并且你想知道你是否还有剩余的一张牌,你会数所有的牌以得到答案吗?说真的,这都是关于性能或冗余的,否则使用你的逻辑,为什么 AnyAll 而不仅仅是 Count

标签: c# linq list duplicates


【解决方案1】:

预期的结果是什么?输出您想要的结果很容易。只需使用foreach

foreach(var dup in dups)
{
    Console.WriteLine(String.Format("EmployeeName - {0}", dup.Key));
    foreach(EmployeeModel x in dup)
        Console.WriteLine(String.Format("placeString:{0} timeString:{1}", x.Place, x.Time));});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2022-11-30
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2013-09-25
    • 2012-11-11
    相关资源
    最近更新 更多