获取列表<;字符串>;列表<;T>;

本文关键字:gt lt 列表 字符串 获取 | 更新日期: 2023-09-27 18:28:39

我目前有一个由以下类组成的List<T>

int id { get; set; }
string title { get; set; }
string description { get; set; }

我想创建一个仅所有标题在列表中的List<string>

哪种方法是最好的性能?

编辑"我的描述"字段平均2k个字符。。。我不希望这只会让获得冠军的速度减慢。

第2版我使用MVC的代码优先(实体框架)。List<T>存储在_context中,我从中查询以获取数据。

第3版如果可能的话。。有没有办法获取标题和ID?

获取列表<;字符串>;列表<;T>;

我想创建一个仅包含列表中所有标题的List<string>

您可以通过Select使用投影。

var list = new List<SomeClass>();
var titleList = list.Select(x => x.title).ToList();

有关LINQ扩展方法的更多信息,请参阅C#中的LINQ入门。

如果可能的话。。有没有办法获取标题和ID?

您可以使用匿名类型将所有三个属性放在一个列表中:

var entityList = list.Select(x => new { x.title, x.id, x.description }).ToList();

哪种方法是最好的性能?

var list = new List<SomeClass>();
var titleList = new List<string>(list.Count);
foreach(var item in list)
{
    titleList.Add(item.title);
}

LINQ不会优于简单的foreach语句,但这是一个折衷方案,您应该通过基准测试来评估,因为在大多数情况下,差异可以忽略不计。

微基准

听起来像是在使用实体框架,在这种情况下,您不会从List<T>创建List<string>,而是直接从_context:查询List<string>

var titles = _context.MyTable.Select(x => x.title).ToList();

是的,你可以把标题和id放在一起:

var titleAndIds = _context.MyTable.Select(x => new{ x.title, x.id}).ToList();

这为您提供了一个List<T>,其中T是一个匿名类型,包括属性titleid

list.Select(o => o.title).ToList();

其中list是泛型类型的List<T>