无法理解ToLookup linq扩展方法的功能

时间:2012-10-30 10:04:56

标签: c#

我试图在代码中找出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);

2 个答案:

答案 0 :(得分:1)

源项(我假设其类型为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

答案 1 :(得分:0)

正如文件所述:

  

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

所以它与GroupBy类似,但有一些差异被描述为here