我有一个IQueryable,并希望将其填充到以Foo为键的字典中,以及该Foo的Bars集合的计数作为值。
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));
}
答案 0 :(得分:1)
我很确定这会有用,你试过这个吗?
var dictionary = foos.ToDictionary(foo => foo, foo => foo.Bars.Count());
答案 1 :(得分:0)
啊,这最终起作用了:
var result = from foo in foos
select new
{
Foo = foo,
Count = foo.Bars.Count()
};
该方法还有一个额外的好处,就是让我指定字段的名称,这在我将这个对象序列化为JSON时很好。