0

我试图在代码中找出 ToLookup 方法的功能。它以某种方式使用分组来返回一个列表。有人可以告诉我这是如何工作的,或者只是引导我朝着正确的方向前进:

.ToLookup(
  c => new 
  {
      c.CoverageType.Code, 
      c.CoverageType.Mnemonic, 
      c.CoverageType.Description, 
      c.CoverageType.CoverageLevel, 
      c.CoverageType.CoveragePosition
  })
.Select(
  t => new CoverageOption
  {
    CoverageType =
      new CoverageType
      {
          Code = t.Key.Code, 
          Mnemonic = t.Key.Mnemonic, 
          Description = t.Key.Description, 
          CoverageLevel = t.Key.CoverageLevel, 
          CoveragePosition = t.Key.CoveragePosition
      },
    Limits =
      (from Coverage c in t select c.Limit).GroupBy(l => l.Code)
        .Select(gr => gr.First()), 
    Deductibles =
      (from Coverage c in t select c.Deductible).GroupBy(d => d.Code)
        .Select(gr => gr.First())
})
.OrderBy(t => t.CoverageType.CoveragePosition);
4

2 回答 2

1

源项目(我假设它具有 type Coverage)按此键分组:

new 
{
  c.CoverageType.Code, 
  c.CoverageType.Mnemonic, 
  c.CoverageType.Description, 
  c.CoverageType.CoverageLevel, 
  c.CoverageType.CoveragePosition
}

对于输入序列中的每个不同的键,CoverageOption都会创建一个。请注意,单个键可能与多个Coverage项目相关联,并且对于每个键和一个或多个关联Coverage项目,计算以下属性CoverageOption

  • CoverageType属性是根据键计算的。

  • Limits属性是通过获取Limit关联Coverage项目的所有值来计算的,并且对于每个不同Coverage.Limit.Code的选择第一个Limit实例。所以这是一个对象序列,Limit每个对象都有一个不同的Code.

  • Deductibles属性是通过获取Deductible关联Coverage项目的所有值来计算的,并且对于每个不同Coverage.Deductible.Code的选择第一个Deductible实例。所以这是一个对象序列,Deductible每个对象都有一个不同的Code.

于 2012-10-30T10:51:48.183 回答
0

正如文件所述:

ToLookup(IEnumerable, Func) 方法返回一个 Lookup,一个将键映射到值集合的一对多字典。查找与字典不同,字典执行键到单个值的一对一映射。

所以它与此处描述的相似,GroupBy但存在一些差异。

于 2012-10-30T10:27:06.150 回答