使用 Lambda/Linq 获取集合中按字母顺序排列的项目列表?
我有一个对象列表。每个对象都包含一个名为“DisplayName”的属性。
我想创建另一个字符串对象列表,其中每个字符串代表初始列表中所有对象的 DisplayName 属性中的第一个字母或字符(可以是数字),并且我希望该列表是不同的。
例如,如果我的列表包含以下三个对象:
(1) DisplayName = 'Anthony' (2) 显示名称 = '丹尼斯' (3) DisplayName = 'John'
我想创建另一个包含以下三个字符串的列表:
(1) 'A' (2)“D” (3) 'J'
知道如何使用 lambda 表达式或 linq 通过最少的编码来做到这一点吗?
I have a list of objects. Each object contains a property called 'DisplayName'.
I want to create another list of string objects, where each string represents the first letter or character (could be a number) in the DisplayName property for all objects in the initial list, and I want the list to be distinct.
So, for example, if my list contained the following three objects:
(1) DisplayName = 'Anthony'
(2) DisplayName = 'Dennis'
(3) DisplayName = 'John'
I would want to create another list containing the following three strings:
(1) 'A'
(2) 'D'
(3) 'J'
Any idea how to do this with minimal coding using lambda expressions or linq?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
像这样:
已编辑
Like this:
Edited
在上面的代码中,
Select
(及其 lambda)仅返回对象x
的显示名称中的第一个字符。这将创建一个string
类型的IEnumerable
,然后将其传递给Distinct()
。这可确保列表中只有唯一的项目。最后,OrderBy
确保您的项目按字母顺序排序。请注意,如果列表中的每个对象都具有不同类型,则您将无法仅调用
x.DisplayName
。在这种情况下,我将创建一个接口,可能称为IDisplayName
,它实现DisplayName
。那么你应该能够使用x =>; ((IDisplayName)x).DisplayName.Substring(0,1)
在您的 lambda 中。In the above code,
Select
(with it's lambda) returns only the first character from the display name of objectx
. This creates anIEnumerable
of typestring
, which is then passed toDistinct()
. This makes sure you have only unique items in the list. Finally,OrderBy
makes sure your items are sorted alphabetically.Note, if each of the objects in the list are of different types, you won't be able to just call
x.DisplayName
. In that case, I would create an interface, possibly calledIDisplayName
, which implementsDisplayName
. Then you should be able to usex => ((IDisplayName)x).DisplayName.Substring(0,1)
within your lambda.或者用查询表示法:
or in query notation: