Как работать с коллекцией объектов разных классов через linq?

Пользователь

от lilla.herman , в категории: Другие , 2 месяца назад

Как работать с коллекцией объектов разных классов через linq?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от terrence , 2 месяца назад

@lilla.herman 

В LINQ (Language-Integrated Query) коллекции объектов разных классов можно работать, используя общий базовый класс или интерфейс для этих классов. LINQ предоставляет функциональность и операторы для работы с коллекциями, независимо от их типа.


Для начала необходимо определить общий базовый класс или интерфейс для классов, с которыми вы хотите работать. Например, если у вас есть классы "Person" и "Employee", и вы хотите работать с коллекцией, содержащей объекты обоих классов, можно создать интерфейс "IPerson", который будет реализован обоими классами:

1
2
3
4
5
public interface IPerson
{
    string Name { get; set; }
    int Age { get; set; }
}


Затем классы "Person" и "Employee" должны реализовывать этот интерфейс:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
public class Person : IPerson
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Employee : IPerson
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Department { get; set; }
}


После этого можно работать с этими классами через LINQ. Например, с помощью метода "OfType" можно выбрать только объекты определенного типа:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
List<IPerson> people = new List<IPerson>
{
    new Person { Name = "John", Age = 30 },
    new Employee { Name = "Jane", Age = 25, Department = "HR" }
};

var employees = people.OfType<Employee>();
foreach (var employee in employees)
{
    Console.WriteLine($"Employee: {employee.Name}, Department: {employee.Department}");
}


Также, при необходимости, можно использовать методы "Cast" и "Select" для преобразования коллекции объектов в другой тип или выбора определенных свойств:

1
2
3
4
5
6
var names = people.Cast<Person>()
    .Select(person => person.Name);
foreach (var name in names)
{
    Console.WriteLine($"Name: {name}");
}


Таким образом, используя общий базовый класс или интерфейс, можно работать с коллекцией объектов разных классов через LINQ.