我有一个对象列表,并且想要获取符合特定条件的第一个对象,但是如果不满足该条件,我想匹配下一个条件,然后最终得到一个"默认"
这是我的对象定义:
public myObject{
int id { get ; set ;}
int type { get ; set ;}
subObjectWithLotsOfProperties { get ; set ;}
}
我有我的对象列表,想要浏览它。 如果我知道我的类型按照我的规则下降了,那么以下内容就可以满足我的需要
myList = myList
.GroupBy(x => x.id,(key, y) => y.OrderByDescending(z=>z.type).FirstOrDefault());
我的规则应该是以下内容:
答案 0 :(得分:3)
按照这些条件订购。请注意,false
在订购时true
之前。
myList.GroupBy(
x => x.Id,
(key, y) => y.OrderBy(z => z.type != 27)
.ThenBy(z => z.type != 14)
.ThenBy(z => z.type != 50)
.First());
那将首先排序类型为27的项目,然后是14,然后是50,然后是其他所有项目。拿第一个会给你一个27,如果有一个,如果没有一个14如果有一个,如果没有那个然后一个50,如果没有一个随机的。请注意,您不需要FirstOrDefault
,因为GroupBy
将始终创建包含至少一个项目的组。
此外,如果您愿意,可以将比较更改为==
并改为使用OrderByDescending
和ThenByDescending
。