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

时间:2014-04-04 12:51:04

标签: c# .net linq

我有一个可能包含例如的列表。以下对象

ObjectFirst {
id = 1;
mode = Constants.Active;
}

ObjectSecond {
id = 2;
mode = Constants.Passive;
}

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

2 个答案:

答案 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()