用LINQ将两个IQueryables合并成一个Dictionary

本文关键字:一个 Dictionary 合并 IQueryables LINQ 两个 | 更新日期: 2023-09-27 17:53:39

我有一个IQueryable,并想把它塞进一个字典,有Foo作为键,Foo的酒吧集合的计数作为值。

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));
}

用LINQ将两个IQueryables合并成一个Dictionary

我很确定这将工作,你试过这个:

var dictionary = foos.ToDictionary(foo => foo, foo => foo.Bars.Count());

啊,这最终成功了:

var result = from foo in foos
             select new
             {
                 Foo = foo,
                 Count = foo.Bars.Count()
             };

该方法还有一个额外的好处,即允许我指定字段的名称,这对于我将该对象序列化为JSON时非常有用。