2013-02-20 2 views
5

Я кодирую свой путь через учебник MS 101 Linq.linq join тип оператора с синтаксисом лямбда

Я пытаюсь реорганизовать запрос на синтаксис лямбда/метода (и наоборот). This один вызов для меня.

Данный запрос:

var custSupQuery = 
    from sup in suppliers 
    join cust in customers on sup.Country equals cust.Country into cs 
    select new { Key = sup.Country, Items = cs }; 

Что я переписал так:

var custSupQuery = suppliers.Join(customers, s => s.Country, c => c.Country, (c, s) => new { Key = s.Country, Items = s, Items2 = c }); 

(я не видел простой способ объединить эти поля образуют оба типа в новый , поэтому я оставил их отдельно).

Кажется, что он летает вместе с компилятором, пока он не попадет на циклы отображения. Второй тип foreach, похоже, не справляется с типом.

Вот код дисплей (который работает с выражением запроса, но не с синтаксисом лямбда/метод):

foreach (var item in custSupQuery) 
{ 
    Console.WriteLine(item.Key + ":"); 
    foreach (var element in item.Items) // <-- error here 
    { 
     Console.WriteLine(" " + element.CompanyName); 
    } 
} 

Ошибка является:

оператор Еогеасп не может работать по переменным тип «JoinOperators.Program.Customer», потому что «JoinOperators.Program.Customer» не содержит общедоступного определения для «GetEnumerator»

Я попытался закончить мой синтаксис лямбда/запроса с помощью вызова AsEnumerable(), но он по-прежнему получает ту же ошибку. Я не уверен, что я мог бы использовать как тип в AsEnumerator<type_goes_here>, так как это анонимно, и у меня нет объекта, который я мог бы назвать GetType().

Любые предложения?

+2

s это всего лишь одно, а не набор вещей. –

ответ

5

Синтаксис join ... into не эквивалентен Join, но до GroupJoin. Вот что вы должны использовать:

var custSupQuery = 
    suppliers.GroupJoin(customers, s => s.Country, c => c.Country, 
         (s, cs) => new { Key = s.Country, Items = cs }); 
+0

Спасибо! Я дам вам крик, когда я сделаю это на http://georgewashingtoncsharp.wordpress.com/ – micahhoover

Смежные вопросы