6

I currently have a List<T> made up of the following class:

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

I want to create a List<string> of only all the title's in the List

Which would be the best performance way to do this?

Edit My Description field averages 2k characters... I dont want that to slow down only getting titles.

Edit2 I am using MVC's Code first (Entity Framework). The List<T> is stored in the _context, which I query from to get the data.

Edit3 IF possible .. Is there a way to get the Title AND ID ?

4

3 回答 3

15

我想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语句,但这是您应该通过基准测试评估的权衡,因为在大多数情况下差异可以忽略不计。

微基准

于 2013-08-21T13:07:03.867 回答
8

听起来您正在使用实体框架,在这种情况下,您不会List<string>从 a创建List<T>- 您将List<string>直接从您的_context:

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

是的,您可以将标题和 ID 放在一起:

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

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

于 2013-08-21T13:20:12.377 回答
4
list.Select(o => o.title).ToList();

list你的泛型类型在哪里List<T>

于 2013-08-21T13:07:07.827 回答