[英]Get Alphabetical List Of Items in Collection Using Lambda/Linq?
我有一個對象列表。 每個對象都包含一個名為“DisplayName”的屬性。
我想創建另一個字符串對象列表,其中每個字符串表示初始列表中所有對象的DisplayName屬性中的第一個字母或字符(可能是數字),我希望列表是不同的。
因此,例如,如果我的列表包含以下三個對象:
(1)DisplayName ='Anthony'(2)DisplayName ='Dennis'(3)DisplayName ='John'
我想創建另一個包含以下三個字符串的列表:
(1)'A'(2)'D'(3)'J'
任何想法如何使用lambda表達式或linq進行最少的編碼?
像這樣:
list.Select(o => o.DisplayName[0].ToString())
.Where(s => Char.IsLetter(s, 0))
.Distinct().ToList();
編輯
List<myObject> mylist = new List<myObject>();
//populate list
List<string> myStringList = myList
.Select(x => x.DisplayName.Substring(0,1))
.Distinct()
.OrderBy(y => y);
在上面的代碼中, Select
(帶有它的lambda)只返回對象x
的顯示名稱中的第一個字符。 這將創建一個IEnumerable
類型的string
,然后傳遞給Distinct()
。 這可確保您在列表中只有唯一的項目。 最后, OrderBy
確保您的項目按字母順序排序。
請注意,如果列表中的每個對象都是不同類型,則您將無法只調用x.DisplayName
。 在這種情況下,我將創建一個接口,可能稱為IDisplayName
,它實現DisplayName
。 然后你應該能夠在你的lambda中使用x => ((IDisplayName)x).DisplayName.Substring(0,1)
。
或以查詢表示法:
var stringList = (from a in objectList
select a.DisplayName.Substring(0,1)).Distinct();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.