如何从列表中获取不同的数据?

Any*_*are 3 c# linq asp.net list distinct

我希望从人员名单中获得不同的清单.

List<Person> plst = cl.PersonList;
Run Code Online (Sandbox Code Playgroud)

如何做到这一点LINQ.我想存储结果List<Person>

Jon*_*eet 5

Distinct()会给你不同的价值 - 但除非你被覆盖Equals/ GetHashCode()你只是得到不同的参考.例如,如果您希望两个Person对象在名称相同时相等,则需要覆盖Equals/ GetHashCode以指示它.(理想情况下,实施IEquatable<Person>以及仅重写Equals(object).)

然后,您需要调用ToList()以将结果返回为List<Person>:

var distinct = plst.Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

如果你想通过一些特定的属性获得不同的人,但这不是"自然"平等的合适候选人,你需要使用GroupBy如下:

var people = plst.GroupBy(p => p.Name)
                 .Select(g => g.First())
                 .ToList();
Run Code Online (Sandbox Code Playgroud)

或使用MoreLINQ中DistinctBy方法:

var people = plst.DistinctBy(p => p.Name).ToList();
Run Code Online (Sandbox Code Playgroud)