#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. Я полагаю, это имеет смысл. Казалось разумным, что это может позволить мне использовать эту временную коллекцию для присоединения.