首页 > 解决方案 > 使用三元运算符时,IEnumerable 未填充预期数据

问题描述

我正在使用以下 IEnumerable 创建一个EncounterEvents.

除了最后一个名为IsManaged.

true这是一个布尔值,如果组中的至少一个EncounterTypeId值是 99 ,我希望它是。

但即使我已经验证了至少一个EncounterTypeId是 99,它总是错误的。

如果我手动设置它IsManaged = true,那么它也很好。

这是我的代码:

var encounterList = dungeonResults.GroupBy(x => new { x.GameType, x.GameId })
 .Select(group => new EncounterEvents
 {
     CharacterName = group.Select(g => g.GeneratedName).FirstOrDefault(),
     EncounterId = group.Select(g => g.ChapterId).FirstOrDefault().ToString(),
     EncounterName = String.Join("; ", group.Select(g => g.ChapterName).ToArray()),
     IsManaged = group.Select(g => g.EncounterTypeId).FirstOrDefault() == 99 ? true : false
 })
 .ToList();

我需要做些什么才能使其正确填充吗?

谢谢!

标签: c#asp.net-coreienumerableasp.net-core-3.1

解决方案


该表达式group.Select(g => g.EncounterTypeId).FirstOrDefault()仅评估组中的第一条记录,在您的情况下可能不是 99。

你可以更好地使用group.Any(g => g.EncounterTypeId==99).

澄清一下,最后的表达式是: IsManaged = group.Any(g => g.EncounterTypeId==99)

如果正在评估的集合中的任何项目为真,它将分配为真。


推荐阅读