不漂亮,但:
IEnumerable<Object1> objects = ...
var firstTwoDistinctValues = objects.Select(o => o.NullBool)
.Distinct()
.Take(2) // Early exit
.ToList();
var result = firstTwoDistinctValues.Count == 2
? null : firstTwoDistinctValues.SingleOrDefault();
現在,這是非常有效的,因爲:
- 它不需要多次枚舉source-collection。當源是一個列表時,這並不是什麼大不了的事,但如果源是一個昂貴的/非確定性的查詢,這可能很重要。
- 如果超過唯一值,它會提前退出。
此外,當source-collection爲空時,它將正常工作。
有關列表,還可以有效地做到:
IList<Object1> objects = ...
var firstNullBool = objects.Select(o => o.NullBool).FirstOrDefault();
var result = objects.All(o => o.NullBool == firstNullBool) ? firstNullBool : null;
來源
2012-01-24 07:10:53
Ani
檢查所有的東西都是平等的嗎?所有的布爾值是相等的? – sblom
是的,我只是想返回一個可爲null的布爾值,而不是一個可爲null的布爾值列表。 –
獲取NullBool的獨特性,如果全部相同,您應該只獲得一條記錄:) – V4Vendetta