C# 如何保留第一组值的值并从列表中删除所有其他值

C# 如何保留第一组值的值并从列表中删除所有其他值,c#,C#,我有重复的名称是针对不同的标准来的,如下所示 var lstData = new List<Data> { new Data {Name = "A", Standard = "sd1"}, new Data {Name = "B", Standard = "sd1"}, new Data {Name = "C", Standard = "sd1"}, new Data

我有重复的
名称
是针对不同的
标准
来的,如下所示

 var lstData = new List<Data>
        {
            new Data {Name = "A", Standard = "sd1"},
            new Data {Name = "B", Standard = "sd1"},
            new Data {Name = "C", Standard = "sd1"},

            new Data {Name = "A", Standard = "sd2"},
            new Data {Name = "B", Standard = "sd2"},
            new Data {Name = "C", Standard = "sd2"},
        };

这里
Name
standard
的所有值都是动态的(我的程序每次运行的值都不同),这里我给出的值A、B、C、std1、std2只是样本值。

您可以通过
Name
属性对所有项进行分组,然后从每组中获取
第一个
项:

List<Data> results = lstData
    .GroupBy(data => data.Name)
    .Select(group => group.First())
    .ToList();
List results=lstData
.GroupBy(数据=>data.Name)
.Select(group=>group.First())
.ToList();

您可以按
名称
属性对所有项目进行分组,然后从每组中选取
第一个
项目:

List<Data> results = lstData
    .GroupBy(data => data.Name)
    .Select(group => group.First())
    .ToList();
List results=lstData
.GroupBy(数据=>data.Name)
.Select(group=>group.First())
.ToList();
列表
有一个方法,该方法接受定义要删除哪些元素的。因此,获取第一个值,然后删除任何不匹配的内容:

var firstStandard = lstData[0].Standard;
lstData.RemoveAll(d => d.Standard != firstStandard);
这可能会比Rufus给出的答案(取决于列表的大小)执行得稍快一些,因为您不会多次遍历整个列表。

list
有一个方法,该方法接受定义要删除哪些元素的。因此,获取第一个值,然后删除任何不匹配的内容:

var firstStandard = lstData[0].Standard;
lstData.RemoveAll(d => d.Standard != firstStandard);

这可能会比Rufus给出的答案(取决于列表的大小)执行得稍快一些,因为您不会多次遍历整个列表。

谢谢,但我无法硬编码std2。这些只是样本值。我的价值观不是fixed@user584018我想我明白了。我更新了我的答案。谢谢,但我不能硬编码std2。这些只是样本值。我的价值观不是fixed@user584018我想我明白了。我更新了我的答案。