Попробуйте это:
var Object = from o in Objects
join r in RecordSet equal o.YourKey equal r.YourForeignKey
select Object { x = r.YourProperty };
Для дополнительной справки по LINQ здесь приведены 101 образец: http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
(старое сообщение для справки)
Используйте LINQ, чтобы объединить две части, если информация в одном IEnumerable (например, в List).
Что-то вроде
var combinedData = from i in listItems
join r in recordSet on r.ID equals i.ID
select new { i.Name, r.Property };
Вот ссылка на объединение с использованием LINQ http://www.dotnetperls.com/join
Кроме того, примеры Google LINQ для вашей платформы .net есть много, и они довольно быстро делают именно то, что вы ищете.
Посмотрев SO на наличие похожих тем, я обнаружил кое-что весьма полезное, о чем я здесь кратко изложу. Проблема в том, что мы не уверены, что вы хотите сделать во внутренних скобках цикла.
Я предполагаю, что вам нужен только набор "виджетов", которые можно соединить со списком "гаджетов" по клавише.
Если вы хотите, чтобы группа виджетов и гаджетов была объединена в новый объект Whatsits - возможно, вы строите плоскую таблицу для диаграммы или что-то в этом роде, используйте этот пример:
var whatsits = from w in widgets
join g in gadgets on w.gadgetID equal g.ID
select new whatsit { name = w.name, id = w.ID };
Если вы хотите объединить несколько виджетов с гаджетами, где свойство гаджета = какое-то значение, а затем выполнить работу с каждым гаджетом, вы сначала собираете гаджеты, а затем выполняете поиск по новой коллекции, например:
var widgetList = from w in widgets
join g in gadgets on w.gadgetID equals g.ID
where g.Name = "whatsit"
select w;
foreach (widget w in widgetList)
{
// Do a bunch of stuff to each widget
}
Обратите внимание, что может быть целесообразно выполнить тест производительности на приведенном выше LINQ, чтобы проверить, запускает ли он сначала лучший виджет или сначала гаджет в объединении.