У меня есть IQueryable и хочу записать его в словарь, в котором есть Foo как ключ, и подсчет этой коллекции Foo's Bars как значение.Слияние двух IQueryables в словарь с LINQ
public class Foo
{
public string ID { get; set; }
public ICollection<Bar> Bars { get; set; }
}
Так что результат будет выглядеть примерно так:
new Dictionary<Foo, int>
{
{ someFoo, 2 },
{ anotherFoo, 6 },
...
}
И мне нужно, чтобы сделать это прямо из IQueryable, без Перебор реальных объектов. Чтобы было ясно, я не хотите сделать это:
// 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());
}
Вещи, которые я пробовал, не работает
МЕТОД 1
var dictionary = foos.ToDictionary(key => key, value => foos.Select(foo => foo.Bars.Count));
МЕТОД 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));
}
Невозможно избежать перечисления перечислимого, если вы хотите получить подсчет коллекции. –
Я не понимаю вашего ограничения. Что вы подразумеваете под словом «не итерирование реальных объектов»? 'ToDictionary' итерации - вы не можете построить словарь без итерации, это не ленивый объект, такой как IQueryable. – Blorgbeard