问题描述
在.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_id
和category_name
,并且要取不重复的数据,最后按照category_name
属性进行排序。以下是按照category_name
进行选择的LINQ
查询方法:
List<Data> listObject = getData();
string[] catNames = listObject
.Select(i=> i.category_name)
.Distinct()
.OrderByDescending(s => s)
.ToArray();
但是,如何同时选择category_id
和category_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();
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册