如何使用单条LINQ查询从List<Quest>的多条件中获取单个布尔值
问题原因
你之前的写法错误核心在于:试图查找同一个Quest对象同时满足4个互斥的Name条件,单个Quest的Name属性只能取一个值,不可能同时是Quest1、Quest2、Quest3、Quest4,所以查询结果永远为空,Any()返回固定为false。
正确实现方案
方案1:直接组合判断(最直观,适合少量固定条件)
直接将你拆分的四个布尔判断用逻辑与组合即可,单条语句就能实现:
bool result = Quests.Any(q => q.Name is "Quest1" && q.State is QuestState.Done) && Quests.Any(q => q.Name is "Quest2" && q.State is QuestState.Done) && Quests.Any(q => q.Name is "Quest3" && q.State is QuestState.Done) && Quests.Any(q => q.Name is "Quest4" && q.State is QuestState.Inactive);
方案2:批量校验(适合条件多、后续可能调整的场景)
把需要校验的任务和对应目标状态存在映射集合里,用All()批量判断所有条件都满足:
// 定义要求的任务-状态对应关系 var questRequirements = new Dictionary<string, QuestState>() { { "Quest1", QuestState.Done }, { "Quest2", QuestState.Done }, { "Quest3", QuestState.Done }, { "Quest4", QuestState.Inactive } }; // 单条LINQ判断所有要求都被满足 bool result = questRequirements.All(require => Quests.Any(q => q.Name == require.Key && q.State == require.Value) );
这个方案后续如果要新增/修改校验条件,只需要调整questRequirements集合即可,不需要修改查询逻辑。
内容的提问来源于stack exchange,提问作者Kuklinski
相关产品推荐
相关产品推荐

