tags:

views:

80

answers:

2

I have a

List<MyObject> 

that I retrieve from the database. However, I would like it keyed by a property in MyObject for grouping purposes. What is the best way with LINQ to cast my list to:

Dictionary<long, List<MyObject>>

I have the following:

myObjectList.ToDictionary(x => x.KeyedProperty)

But it returns:

Dictionary<long, MyObject>
+4  A: 

It sounds like you want to group the MyObject instances by KeyedProperty and put that grouping into a Dictionary<long,List<MyObject>>. If so then try the following

List<MyObject> list = ...;
var map = list
  .GroupBy(x => x.KeyedProperty)
  .ToDictionary(x => x.Key, x => x.ToList());
JaredPar
A: 

You should use the ToLookup extension method on the Enumerable class like so:

List<MyObject> list = ...;

ILookup<long, MyObject> lookup = list.ToLookup(o => o.KeyedProperty);

If you want to place that in a dictionary, then you could do this:

IDictionary<long, IEnumerable<MyObject>> dictionary = lookup.ToDictionary(
    l => l.Key);
casperOne