Koduję sobie drogę przez samouczek MS 101 Linq.Typ operatora linq join ze składnią lambda
Próbuję refactorować zapytanie do składni lambda/metody (i na odwrót). This jedno jest dla mnie wyzwaniem.
Podana zapytania to:
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 };
Który ja ponownie napisał tak:
var custSupQuery = suppliers.Join(customers, s => s.Country, c => c.Country, (c, s) => new { Key = s.Country, Items = s, Items2 = c });
(nie widzę łatwy sposób połączyć oba rodzaje pól formularza w nowej zdanie, więc zostawiłem je osobno).
To wydaje się latać z kompilatorem, dopóki nie dostanie się do pętli wyświetlacza. Drugi foreach nie może obsługiwać tego typu.
Oto kod wyświetlacz (który współpracuje z wyrażeniu kwerendy, ale nie ze składnią lambda/metoda):
foreach (var item in custSupQuery)
{
Console.WriteLine(item.Key + ":");
foreach (var element in item.Items) // <-- error here
{
Console.WriteLine(" " + element.CompanyName);
}
}
błędu jest:
oświadczenie foreach nie może działać w zmiennych typ "JoinOperators.Program.Customer" ponieważ "JoinOperators.Program.Customer" nie zawiera publicznej definicji dla "GetEnumerator"
Próbowałem zakończyć moją składnię lambda/zapytania za pomocą wywołania AsEnumerable()
, ale wciąż otrzymuje ten sam błąd. Nie jestem pewien, co mogę użyć jako typ w AsEnumerator<type_goes_here>
, ponieważ jest anonimowy i nie wydaje mi się, aby obiekt mógł być nazwany GetType()
.
Wszelkie sugestie?
s to tylko jedna rzecz, a nie zbiór rzeczy. –