从列表中的两个不同对象返回 LINQ 选择查询中的特定对象



我有一个列表,可以包含例如以下对象

ObjectFirst {
id = 1;
mode = Constants.Active;
}
ObjectSecond {
id = 2;
mode = Constants.Passive;
}

如何进行 LINQ 查询,选择具有"mode = Constants.Active"的对象(如果存在),如果不存在,则选择具有"mode = Constants.Passive"的对象?只应返回一个对象。我想用一个 LINQ 查询来解决这个问题。

我不确定是否可以在一个查询中完成,但可以通过多种方式完成,您可以尝试:

var obj = list.Any(r=> r.mode == Constants.Active) ? 
                            list.FirstOrDefault(r=> r.mode == Constants.Active)
                            list.FirstOrDefault(r=> r.mode == Constants.Passive);

或:

var obj = list.FirstOrDefault(r=> r.mode == Constants.Active);
if(obj == null)
{
   obj = list.FirstOrDefault(r=> r.mode == Constants.Passive);
}

理论上你可以按mode排序,从而给它们一个优先级,然后返回第一个。假设Constants.Active低于Constants.Passive.

var obj = list.OrderBy(r => r.mode).FirstOrDefault()

或者,您可以添加一些额外的检查:

var obj = list.Where(r => r.Id == someId).OrderBy(r => r.mode).FirstOrDefault()

相关内容

  • 没有找到相关文章

最新更新