我有一个可能包含例如的列表。以下对象
ObjectFirst {
id = 1;
mode = Constants.Active;
}
ObjectSecond {
id = 2;
mode = Constants.Passive;
}
如果存在,则如何选择具有“mode = Constants.Active”的对象的LINQ查询?如果不存在,则选择具有“mode = Constants.Passive”的对象?只应返回一个对象。我想用一个LINQ查询来解决这个问题。
答案 0 :(得分:1)
我不确定是否可以在一个查询中完成,但可以通过多种方式完成,您可以尝试:
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);
}
答案 1 :(得分:0)
理论上,您可以通过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()