首页 / .NET / 正文

[C#].NET/C#程序开发中如何使用LINQ从一个对象集合中选择对象的多个属性?

2790 发布于: 2018-04-12 读完约需4分钟

问题描述

在.NET/C#程序开发中,有如下的实体对象:

public class Data
{
    public int item1;
    public int item2;
    public int category_id;
    public string category_name;
}

并且当前有一个关于Data对象的数据集合List<Data>。现在想从这个List<Data>集合中选择两个属性,分别为:category_idcategory_name,并且要取不重复的数据,最后按照category_name属性进行排序。以下是按照category_name进行选择的LINQ查询方法:

List<Data> listObject = getData();
string[] catNames = listObject
                    .Select(i=> i.category_name)
                    .Distinct()
                    .OrderByDescending(s => s)
                    .ToArray();

但是,如何同时选择category_idcategory_name两个属性呢?

方案一

Linq中,可以使用匿名对象来选择集合中对象的任意属性,如下:

var cats = listObject
    .Select(i => new { i.category_id, i.category_name })
    .Distinct()
    .OrderByDescending(i => i.category_name)
    .ToArray();

当然,以上的实现是没有使用GroupBy的,我们也可以使用GroupBy(...)的静态扩展方法来实现,如下:

Data[] cats = listObject
    .GroupBy(i => new { i.category_id, i.category_name })
    .OrderByDescending(g => g.Key.category_name)
    .Select(g => g.First())
    .ToArray();

方案二

以下是使用Linq表达式来实现的:

var selectedCategories =
    from value in
        (from data in listObject
        orderby data.category_name descending
        select new { ID = data.category_id, Name = data.category_name })
    group value by value.Name into g
    select g.First();

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [C#].NET/C#程序开发中将DataTable转换到泛型集合(List<T>)的方法有哪些,哪种方式性能更好/更高效呢?

下一篇: [LINQ].NET/C#开发中如何使用LINQ从一个对象集合中选择对象的多个属性?

本文永久链接码友网 » [C#].NET/C#程序开发中如何使用LINQ从一个对象集合中选择对象的多个属性?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册