C# list.select LINQ

0

Mam dodatkową klasę Potwory, przyjmuje stringa i dwa inty: nazwa, moc, koszt. Uczę się LINQ, napotkałem select. Chciałbym wyodrębnić dwie z pośród trzech elementów do nowej listy. Np. nazwe oraz moc. Z jednym elementem nie ma problemu wyodrębnić :

 lista.Select(p => p.nazwa);

, co do dwóch wartości możliwe jest: (p => new { p.nazwa, p.moc, p.koszt});


Jednak jest to typ niezdefiniowany i ni jak potem na tym działać. Jak można wyodrębnić 2 z 3 elementów (nazwa, moc) na liście. Stworzyć nową listę? z edytować? złą pisze składnię?
Bardzo prosze o pomoc, z góry dziękuję !
```csharp
...
lista.Add(new Potwory("Szkielet", 20, 15));
lista.Add(new Potwory("Diabel  ", 80, 290));

            var zz = lista.Select(p => new Potwory { p.nazwa, p.moc}); //???

cały kod: http://pastebin.com/Hs6vJUaU

2

select nie służy do wyodrębniania tylko do projekcji (tak jak w SQL). Co Ty chcesz osiągnąć? Nie wystarczy Ci po prostu Where?

1

można się dostać do pól w ten sposób attributes.First().nazwa, attributes.First().nazwa, attributes.First().nazwa, attributes.First().moc

http://rextester.com/SKTL93259

List<Monster> monsters = new List<Monster>(new Monster[]{
    new Monster("potwor1", 2, 10),
    new Monster("potwor2", 22, 110),
    new Monster("potwor3", 13, 5110)
});

var attributes = from item in monsters select new {item.moc, item.nazwa};

Console.WriteLine(String.Format("Pierwszy potwor {0} ma {1} mocy", attributes.First().nazwa, attributes.First().moc));

attributes.ToList().ForEach(Console.WriteLine);
1

Nie nie i nie. Po co chcesz ciachać klasę na atrybuty? Po prostu używaj klasy Potwory (proponuję przemianować na "Creature").

1 użytkowników online, w tym zalogowanych: 0, gości: 1