Ich habe ein IQueryable und möchte das in ein Dictionary stopfen, das den Foo als Schlüssel hat, und die Zählung der Foo's Bars-Sammlung als Wert.Zwei IQueryables in ein Dictionary mit LINQ verschmelzen
public class Foo
{
public string ID { get; set; }
public ICollection<Bar> Bars { get; set; }
}
So würde die Ausgabe wie folgt aussehen:
new Dictionary<Foo, int>
{
{ someFoo, 2 },
{ anotherFoo, 6 },
...
}
Und ich brauche diese von der IQueryable gerade zu tun, ohne Iterieren über die eigentlichen Objekte. Um es klar, ich nicht wollen, dies zu tun:
// given some IQueryable<Foo> called 'foos' and some Dictionary<Foo, int> called 'dictionary'
foreach (var foo in foos.ToList())
{
dictionary.Add(foo, foo.Bars.Count());
}
Dinge, die ich habe versucht, die nicht funktionierten
METHODE 1
var dictionary = foos.ToDictionary(key => key, value => foos.Select(foo => foo.Bars.Count));
METHODE 2
var counts = foos.Select(foo => foo.Bars.Count);
for (var i = 0; i < foos.Count(); i++)
{
dictionary.Add(foos.ElementAt(i), counts.ElementAt(i));
}
Es gibt keine Möglichkeit zu vermeiden, den Enumerable aufzuzählen, wenn Sie die Anzahl der Auflistung abrufen möchten. –
Ich bin nicht klar auf Ihre Einschränkung. Was meinst du mit "nicht über die tatsächlichen Objekte iterieren"? 'ToDictionary' iteriert - Sie können kein Dictionary ohne Iteration erstellen, es ist kein lazy-evaluiertes Objekt wie IQueryable. – Blorgbeard