C# 无法理解ToLookup linq扩展方法的功能
我试图在代码中找出ToLookup方法的功能。它以某种方式使用分组来返回列表。有人能告诉我这是如何工作的,或者只是指导我正确的方向:C# 无法理解ToLookup linq扩展方法的功能,c#,C#,我试图在代码中找出ToLookup方法的功能。它以某种方式使用分组来返回列表。有人能告诉我这是如何工作的,或者只是指导我正确的方向: .ToLookup( c => new { c.CoverageType.Code, c.CoverageType.Mnemonic, c.CoverageType.Description, c.CoverageType.CoverageLevel, c.CoverageType.
.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);
如文件所述: ToLookup(IEnumerable,Func)方法返回一个查找,一个一对多字典,将键映射到值集合。查找不同于字典,字典执行键到单个值的一对一映射 因此,它与GroupBy类似,但也有一些不同之处。源项(我假设其类型为
覆盖范围
)按以下键进行分组:
new
{
c.CoverageType.Code,
c.CoverageType.Mnemonic,
c.CoverageType.Description,
c.CoverageType.CoverageLevel,
c.CoverageType.CoveragePosition
}
为输入序列中的每个不同键创建一个CoverageOption
。请注意,一个键可能与多个覆盖范围项目关联,对于每个键和一个或多个关联的覆盖范围项目,计算覆盖范围操作的以下属性:
CoverageType
属性是从键计算的
Limits
属性是通过获取相关Coverage
项的所有Limit
值以及每个不同的Coverage.Limit.code
选择第一个Limit
实例来计算的。这是一系列的Limit
对象,每个对象都有一个不同的code
免赔额
属性是通过获取相关覆盖范围
项目的所有免赔额
值以及每个不同的覆盖范围.免赔额.code
选择第一个免赔额
实例来计算的。所以这是一系列的免赔额
对象,每个对象都有一个不同的代码
您不明白哪一点?使用ToLookup
创建一对多字典(lambda函数是键选择器函数)。您可以在稍后的选择中看到这一点,您正在使用t.Key…
在选择中哇,这个答案太棒了。我正在经历这一切,我相信这将扫除乌云!!谢谢你,伙计!因此,这个ToLookup的关键是一个元组,最初我将其更改为匿名类型,如上面的代码所示。如果我所做的是对的,你能对此发表评论吗?我删除了元组,因为我必须使用items1、2等来访问键,这使得代码不可读。@Charu:您应该能够使用CoverageType
而不是使用匿名类型作为键。但是,要做到这一点,您需要覆盖CoverageType.Equals
和CoverageType.GetHashCode
,以确保具有相同属性值的不同实例被视为相等。