public class Item
{
public int Id {get; set;}
public bool Selected {get; set;}
}
List<Item> itemList = new List<Item>(){ /* fill with items */ };
我需要創建一個滿足以下條件的項目列表。從itemList
,我需要按Id
對這些項目進行分組,然後從每個組中選擇一個項目。所選項目必須爲Selected == true
。如果沒有選擇組中的項目,則可以選擇任何項目,這並不重要,但必須選擇一個項目。基於這個問題使用LINQ從IGrouping中選擇特定元素
: How to get distinct instance from a list by Lambda or LINQ
我可以整理出以下,這似乎工作:
var distinctList = itemList.GroupBy(x => x.Id,
(key, group) => group.Any(x => x.Selected) ?
group.First(x => x.Selected) : group.First());
是否有更有效或更簡單的方式來實現這一目標?我試過FirstOrDefault()
,但似乎無法讓它做我需要的。我對上述代碼效率的擔心是對Any()的調用。
是不是很簡單的嗎?添加一些額外的換行符和/或刪除一些縮進,以便更好地適應屏幕,對我來說看起來很好。 – Servy 2012-04-16 20:48:51
@Servy - 我不明白倒票嗎?下面的答案比我上面的例子更簡單,更高效。這就是我問這個問題的原因。 – 2012-04-17 01:08:30