获取List <T>中的List <string>变量

The*_*kZn 6 c# asp.net-mvc list ef-code-first

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

int id { get; set; }
string title { get; set; }
string description { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

这将是最好的表现方式吗?

编辑 我的描述字段平均2k个字符...我不希望它减慢获得标题.

Edit2 我首先使用MVC的代码(实体框架).将List<T>存储在_context,这是我从查询得到的数据.

编辑3如果可能..有没有办法获得标题和ID?

Dus*_*gen 15

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

您可以使用投影通过Select.

var list = new List<SomeClass>();

var titleList = list.Select(x => x.title).ToList();
Run Code Online (Sandbox Code Playgroud)

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

如果可能..有没有办法获得标题和ID?

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

var entityList = list.Select(x => new { x.title, x.id, x.description }).ToList();
Run Code Online (Sandbox Code Playgroud)

这将是最好的表现方式吗?

var list = new List<SomeClass>();
var titleList = new List<string>(list.Count);

foreach(var item in list)
{
    titleList.Add(item.title);
}
Run Code Online (Sandbox Code Playgroud)

LINQ不会胜过一个简单的foreach陈述,但这是一个权衡,你应该通过基准测试来评估,因为在大多数情况下差异可以忽略不计.

微基准

  • 它解释了linq的不同扩展方法,如果OP不熟悉它们.如果你知道一个更好的链接,我可以交换它. (2认同)

Ere*_*mez 8

听起来你正在使用Entity Framework,在这种情况下你不会创建List<string>一个List<T>- 你可以List<string>直接从你的查询_context:

var titles = _context.MyTable.Select(x => x.title).ToList();
Run Code Online (Sandbox Code Playgroud)

是的,你可以一起得到标题和ID:

var titleAndIds = _context.MyTable.Select(x => new{ x.title, x.id}).ToList();
Run Code Online (Sandbox Code Playgroud)

这给你一个List<T>where T是一个匿名类型,包括属性titleid.