首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Linq中的列表中选择多个字段

从Linq中的列表中选择多个字段
EN

Stack Overflow用户
提问于 2009-07-29 20:55:22
回答 7查看 489.5K关注 0票数 152

在ASP.NET C#中,我有一个结构:

代码语言:javascript
复制
public struct Data
{
    public int item1;
    public int item2;
    public int category_id;
    public string category_name;
}

我有一份清单。我想选择category_idcategory_name,运行DISTINCT,最后在category_name上运行ORDERBY

这是我现在所拥有的:

代码语言:javascript
复制
List<Data> listObject = getData();
string[] catNames = listObject
                    .Select(i=> i.category_name)
                    .Distinct()
                    .OrderByDescending(s => s)
                    .ToArray();

这显然只是获得了类别名称。我的问题是,如何获取多个字段,以及将其存储在什么数据结构中(而不是string[])?

编辑

使用结构列表并不是一成不变的。如果改变我的后台数据结构以使选择更容易(我将编写很多这样的代码),那么我会很乐意接受建议。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-07-29 21:01:38

匿名类型允许您将任意字段选择到稍后在代码中强类型的数据结构中:

代码语言:javascript
复制
var cats = listObject
    .Select(i => new { i.category_id, i.category_name })
    .Distinct()
    .OrderByDescending(i => i.category_name)
    .ToArray();

由于您(显然)需要存储它以供以后使用,您可以使用GroupBy操作符:

代码语言:javascript
复制
Data[] cats = listObject
    .GroupBy(i => new { i.category_id, i.category_name })
    .OrderByDescending(g => g.Key.category_name)
    .Select(g => g.First())
    .ToArray();
票数 263
EN

Stack Overflow用户

发布于 2009-07-29 20:57:46

您可以使用匿名类型:

代码语言:javascript
复制
.Select(i => new { i.name, i.category_name })

编译器将为具有namecategory_name属性的类生成代码,并返回该类的实例。您还可以手动指定属性名称:

代码语言:javascript
复制
i => new { Id = i.category_id, Name = i.category_name }

您可以拥有任意数量的属性。

票数 24
EN

Stack Overflow用户

发布于 2015-01-03 21:20:37

您可以使用linq select选择多个字段,如上所述,在各种示例中,这将作为匿名类型返回。如果你想避免这种匿名类型,这里有一个简单的技巧。

代码语言:javascript
复制
var items = listObject.Select(f => new List<int>() { f.Item1, f.Item2 }).SelectMany(item => item).Distinct();

我想这解决了你的问题

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1202981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档