首页 > 解决方案 > 使用列表类型的类的属性以外的值创建一个新列表

问题描述

我有一个Customers具有IdName属性的类。创建Customers列表后,我想要一个customer没有重复名称的新列表,即Customers.Name必须是唯一的。我当前的输出:

Gustavo
Gabriel
Mariza
Sandro
Gustavo
Gabriel
Lilian
Sandro

预期输出:

Gustavo
Gabriel
Mariza
Sandro
Lilian

我试试这个,但我一直在犯与类型转换相关的错误:

using System;
using System.Collections.Generic;
using System.Linq;

namespace SelectDistinct
{
    public class Program
    {
        static void Main(string[] args)
        {
            List<Customers> customers = new List<Customers>();
            customers.Add(new Customers(0, "Gustavo"));
            customers.Add(new Customers(0, "Gabriel"));
            customers.Add(new Customers(0, "Mariza"));
            customers.Add(new Customers(0, "Sandro"));
            customers.Add(new Customers(0, "Gustavo"));
            customers.Add(new Customers(0, "Gabriel"));
            customers.Add(new Customers(0, "Lilian"));
            customers.Add(new Customers(0, "Sandro"));

            customers = customers.Select(x => x.Name.Distinct());

            customers.ToList().ForEach(x =>
            {
                Console.WriteLine(x.ToString());
            });
        }

        public class Customers
        {
            public int Id { get; set; }
            public string Name { get; set; }

            public Customers(int id, string name)
            {
                Id = id;
                Name = name;
            }
        }
    }
}

任何人都可以帮忙吗?

标签: c#linq

解决方案


使用GroupBy给你一个预期的结果

var result = customers
    .GroupBy(c => c.Name)
    .Select(g => g.First())
    .ToList();
result.ForEach(c => Console.WriteLine(c.Name));

输出将如下

Gustavo
Gabriel
Mariza
Sandro
Lilian

推荐阅读