簡體   English   中英

使用Lambda / Linq獲取集合中按字母順序排列的項目列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM