C# 的 LINQ 方法 DistinctBy
不能直接处理嵌套对象。但是,你可以通过使用 Select
和 Distinct
方法组合来实现处理嵌套对象的功能。以下是一个示例:
假设你有一个类 Person
,其中包含一个嵌套的 Address
类:
public class Address { public string Street { get; set; } public string City { get; set; } } public class Person { public string Name { get; set; } public Address Address { get; set; } }
现在,假设你有一个 List
,你想要根据 Address
类的属性(例如,Street
和 City
)获取不重复的 Person
对象。你可以这样做:
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { Listpeople = new List { new Person { Name = "Alice", Address = new Address { Street = "1st", City = "New York" } }, new Person { Name = "Bob", Address = new Address { Street = "2nd", City = "New York" } }, new Person { Name = "Charlie", Address = new Address { Street = "1st", City = "Los Angeles" } }, new Person { Name = "David", Address = new Address { Street = "3rd", City = "New York" } } }; var distinctPeople = people .Select(p => new { p.Name, p.Address.Street, p.Address.City }) .Distinct(); foreach (var person in distinctPeople) { Console.WriteLine($"Name: {person.Name}, Street: {person.Street}, City: {person.City}"); } } }
在这个示例中,我们首先使用 Select
方法创建一个新的匿名对象,其中包含 Name
、Street
和 City
属性。然后,我们使用 Distinct
方法根据这些属性获取不重复的对象。最后,我们遍历 distinctPeople
列表并输出结果。