Соединить списки

219
17 декабря 2018, 14:40

Есть коллекция объектов A в каждом из объектов A есть коллекция объектов B и есть просто объект B. Как с помощью LINQ получить коллекцию объектов B соединив объект B c всеми коллекциями объектов B в коллекции объектов A?

Answer 1

Допустим, есть типы

class B
{
}
class A
{
    public List<B> BCollection = new List<B>();
}

Инициализируем их

var aCollection = Enumerable.Range(1, 10).Select(x => new A() {BCollection = Enumerable.Range(1, 10).Select(y=>new B()).ToList()});
var b = new B();

Объеденим все B типы

var unionOfB = aCollection.SelectMany(x => x.BCollection).Concat(new[] {b});        

Если у вас .NET 4.7.1+, вместо Concat несколько эффективнее будет использовать Append

var unionOfB = aCollection.SelectMany(x => x.BCollection).Append(b);        
Answer 2

Пример если типы одинаковые :

        var B = new T();
        var ListB = new List<T>();
        var listA = new List<T>();
        listA = listA.Concat(ListB).Append(B).ToList();

Пример если объекты имеют разные типы, но B наследуется от A:

    private class A {}
    private class B : A  { } 
    private void Test()
    {
        var B = new B();
        var ListB = new List<B>();
        var listA = new List<A>();
        listA = listA.Concat(ListB).Append(B).ToList();
    }

Пример если типы разные, нет наследования и реализации одного интерфейса то просто в лист object :

    var B = new B();
    var ListB = new List<B>();
    var listA = new List<A>();
    var test = listA.Select(x => x as object).Concat(ListB.Select(x => x as object)).Append(B as object)
        .ToList();
READ ALSO
Событие - Когда добавляется что либо в StackPanel

Событие - Когда добавляется что либо в StackPanel

Я прикрутил к StackPanel скролл, но он не так пока работает как мне хотелось быОн стоит на месте, когда содержимого больше чем высота StackPanel

164
Записать в log.txt о Mixed Content на странице?

Записать в log.txt о Mixed Content на странице?

Я использую ssl но иногда на страницах сайта встречаются внешнее изображения, добавлены пользователями, с протоколом http, как записать в logtxt...

227
Curl разный ответ сервера: 200 и 403

Curl разный ответ сервера: 200 и 403

Пытаюсь разобраться с Curl/ Запускаю следкод:

203
PHP Laravel не видит app.js и app.css в app.blade.php

PHP Laravel не видит app.js и app.css в app.blade.php

Не работает логин и регистрация

324