Linq и попытка присоединиться к результатам оператора let

#c# #linq

#c# #linq

Вопрос:

Я пытаюсь использовать linq таким образом, чтобы избежать выполнения foreach над потоками данных в наборе данных:

 var results = from dataRow in DataRows
              let MoreData = func(dataRow.ID)
              join moreDataRow in MoreData on dataRow.ID2 = moreDataRow.ID2
              select new
              {
                  ID1 = dataRow.ID,
                  ID2 = dataRow.ID2,
                  ID3 = dataRow2.ID3
              };
  

Я хотел бы выполнить что-то вроде описанного выше, но linq не может использовать MoreData как часть инструкции join . Если я не смогу этого сделать, я могу просто выполнить foreach для потоков данных и перейти оттуда.

Существует ли linqy способ объединения данных, которые будут недоступны до итерации по элементу, а затем выполнения соединения из исходных данных с вновь сгенерированными данными, как указано выше?

Комментарии:

1. Каков тип MoreData?

2. Я полагаю, что вы можете либо присоединиться к выводу вашей функции напрямую, например: func (dataRow.Id ).Присоединиться (….) или обернув его (из … пусть MoreData = func(DataRow. ID) выберите дополнительные данные). Join(…) редактировать, этот комментарий не имеет смысла, пожалуйста, проигнорируйте и прочитайте могучий скит

Ответ №1:

join Предложение должно принимать полную коллекцию, а не что-то, что зависит от текущей строки. Однако вы можете использовать несколько from операторов:

 var results = from dataRow in DataRows
              from moreDataRow in func(dataRow.ID)
              where dataRow.ID2 == moreDataRow.ID2
              select new
              {
                  ID1 = dataRow.ID,
                  ID2 = dataRow.ID2,
                  ID3 = dataRow2.ID3
              };
  

Комментарии:

1. Я полагаю, это имеет смысл. Казалось разумным, что это может позволить мне использовать эту временную коллекцию для присоединения.