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

.NET 作者: Rector 13阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

在.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#程序开发中如何使用LINQ从一个对象集合中选择对象的多个属性?

发布于: 2018-04-12 21:10:22
分享扩散:

文章评论

获取验证码