Как я могу установить свойства для всех элементов из запроса linq со значениями из другого объекта который также извлекается из запроса?

У меня есть запрос извлечение из базы данных:

List<myClass> items = new List<myClass>(from i in context
                      select new myClass
                      {
                          A = i.A,
                          B = "",    // i doesn't know this, this comes from elsewhere
                          C = i.C
                      }

У меня также есть другой запрос, делающий похожую вещь:

List<myClass2> otherItems = new List<myClass2>(from j in context
                            select new myClass2
                            {
                                A = j.A,   // A is the intersection, there will only be 1 A here but many A's in items
                                B = j.B
                            }

На самом деле эти классы намного больше и запрашивают данные, которые разделены не только базой данных, но и сервером. Запрос LINQ для заполнения свойства B для всех элементов , где элементы.A пересекаются? Все встроенные предикаты LINQ появляются только для выполнения агрегатов, выборок или логических выражений.

В моем мозгу было что-то вроде это, но все это не работает:

items.Where(x => x.B = (otherItems.Where(z => z.A == x.A).Single().B));

Или я просто смешон, пытаясь заставить эту работу работать в LINQ, и должен просто отказаться от этого в пользу цикла for, в котором фактически установка становится тривиальной? Из-за крайних сроков я буду прибегать к циклу for (и, вероятно, в конечном итоге он будет намного более читабельным), но возможно ли это сделать? Требуется ли метод расширения, чтобы добавить специальный предикат, позволяющий это?

13
задан Joel Etherton 21 October 2011 в 15:43
поделиться