【发布时间】:2021-05-31 18:08:11
【问题描述】:
我有一个包含四个对象的列表,名为任务。每个任务对象都有属性: 名称(字符串)和状态(枚举)。状态可以有五种不同的条件。
我只需要一个布尔值,如果:
- 三个特定任务的状态为完成
- 某个特定任务处于非活动状态
例如,每个单独的查询:
bool isDone1 = Quests.Where(q => q.Name is "Quest1" && q.State is QuestState.Done).Any();
bool isDone2 = Quests.Where(q => q.Name is "Quest2" && q.State is QuestState.Done).Any();
bool isDone3 = Quests.Where(q => q.Name is "Quest3" && q.State is QuestState.Done).Any();
bool isInactive = Quests.Where(q => q.Name is "Quest4" && q.State is QuestState.Inactive).Any();
但是如何将它们放在一个 LINQ 查询中呢? 我尝试了多种变体,但总是得到一个错误的布尔值,尽管我知道它必须是真的。例如:
bool test= (from quest in Quests
where quest.Name is "Quest1" && quest.State is QuestState.Done
where quest.Name is "Quest2" && quest.State is QuestState.Done
where quest.Name is "Quest3" && quest.State is QuestState.Done
where quest.Name is "Quest4" && quest.State is QuestState.Inactive
select quest).Any();
或者像这样:
bool test= (from quest in Quests
where quest.Name is "Quest1" && quest.State is QuestState.Done &&
quest.Name is "Quest2" && quest.State is QuestState.Done &&
quest.Name is "Quest3" && quest.State is QuestState.Done &&
quest.Name is "Quest4" && quest.State is QuestState.Inactive
select quest).Any();
还有其他一些不同的变化,但总是没有积极的结果。 也许有更多 LINQ 技能的人可以帮助找到一个好的解决方案。 非常感谢!
【问题讨论】: