Na liście mam następujący obiekt:
public class DemoClass
{
public int GroupKey { get; set; }
public string DemoString { get; set; }
public object SomeOtherProperty { get; set; }
}
Teraz chcę z tego utworzyć następujący słownik:
Dictionary<int, List<DemoClass>>
Chcę pogrupować List<DemoClass>
według nieruchomości GroupKey
, ale nie rozumiem, jak to się robi i jakiejś pomocy.
Po zastanowieniu osiągnąłem wymagane zachowanie dzięki:
var groupedDemoClasses = from demoClass in mySepcialVariableWhichIsAListOfDemoClass
group demoClass by demoClass.GroupKey
into groupedDemoClass
select groupedDemoClass;
var neededDictionary = groupedDemoClass.ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
ale czy istnieje sposób, aby uczynić to jednym stwierdzeniem?
Już uczyniłeś to jednym liniowcem. Po prostu umieść
ToDictionary
na końcu swojej pierwszej linii. Jeśli chcesz, aby był krótszy, użyj składni kompozycji funkcjonalnej zamiast składni zapytania.źródło
Idę trochę off topic tutaj, ale mam do tego wątku becausde szukałem sposobu na stworzenie słownika słownika w LINQ, a rozmowa tutaj prowadzi mnie do odpowiedzi ...
Państwo może używać LINQ do tworzenia słowników wielopoziomowych, co jest przydatne w scenariuszach, gdzie masz więcej niż 1 klucz lub wymiar, który chcesz wyszukać przez. Sztuczka polega na utworzeniu grupy, a następnie przekonwertowaniu jej na słownik w następujący sposób:
Wynikowego zapytania można użyć w następujący sposób:
Mam nadzieję, że jest to pomocne dla każdego, kto potrzebuje tego rodzaju zapytania.
źródło