c# - 使用列表类型的类的属性以外的值创建一个新列表
问题描述
我有一个Customers
具有Id
和Name
属性的类。创建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;
}
}
}
}
任何人都可以帮忙吗?
解决方案
使用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
推荐阅读
- vba - 使用 VBA 重命名文件夹
- php - Laravel 5.8.16 类 'Illuminate\Queue\QueueManager' 未找到错误
- c++ - 阵列-通过二级阵列循环
- gcc - 制造(未指定目标)
- twitter-bootstrap - Bootstrap 模式在关闭时垂直移动网站
- c - 在纯 C 中将 HTTP 连接传输到 HTTPS
- javascript - 这可以成为捍卫 csrf 的策略吗?(双重提交cookie)
- rust - 在 macro_rules 中存储状态
- c# - 如何创建文件夹并对其进行读写限制,使其只能通过我的应用程序打开?
- android - 带有 Android Retrofit 的 POST 返回 null