【问题标题】:Check if grouped items in list are not unique with LINQ检查列表中的分组项目是否与 LINQ 不同
【发布时间】:2019-07-30 01:01:12
【问题描述】:

我有一个类的列表,类是这样的:

public class Reg
{
    public string GID;
    public string name;
}

我通过此代码根据GID 对列表进行了分组:

 List<Reg> fLst = new List<Reg>(lst.Where(x => x.GID.Trim() == ""));
 var gLst = lst
     .Where(x => x.GID.Trim() != "")
     .GroupBy(u => u.GID)
     .Select(grp => grp.ToList())
     .ToList();

现在我需要使用 LINQ 查找那些没有唯一名称的组吗?我的意思是那些使用 LINQ 具有不同名称的项目的组。

【问题讨论】:

  • 按名称对组进行分组。查找包含多个项目的名称组。

标签: c# list group-by


【解决方案1】:

您可以比较计数并这样做:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp18
{
    public class Reg
    {
        public string GID;
        public string name;
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<Reg> youList = new List<Reg>();

            //Test data
            youList.Add(new Reg
            {
                GID = "grp1",
                name = "1"
            });
            youList.Add(new Reg
            {
                GID = "grp1",
                name = "1"
            });
            youList.Add(new Reg
            {
                GID = "grp1",
                name = "2"
            });
            youList.Add(new Reg
            {
                GID = "grp2",
                name = "1"
            });
            youList.Add(new Reg
            {
                GID = "grp2",
                name = "2"
            });
            youList.Add(new Reg
            {
                GID = "grp3",
                name = "3"
            });
            youList.Add(new Reg
            {
                GID = "grp3",
                name = "3"
            });

            var gruppedList = youList.Where(x => x.GID.Trim() != "").GroupBy(r => r.GID).Select(grp => new { A = grp.Key, B = grp.Select(r => r.name).ToList() }).ToList();
            var grpNameWhereNotUnique = gruppedList.Where(r => r.B.Count != r.B.Distinct().Count()).Select(r => r.A).ToList();
            Console.WriteLine(JsonConvert.SerializeObject(grpNameWhereNotUnique));
            Console.ReadKey();
        }
    }
}

所以,grp1 的值为 1,2,1 grp2 的值为 1,2,grp3 的值为 3,3

结果说:

["grp1","grp3"]

【讨论】:

    猜你喜欢
    • 2012-06-30
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多