You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用单条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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 11:15:04