C# 获取列表<;字符串>;列表中变量的数量<;T>;

C# 获取列表<;字符串>;列表中变量的数量<;T>;,c#,asp.net-mvc,list,ef-code-first,C#,Asp.net Mvc,List,Ef Code First,我目前有一个由以下类别组成的列表: int id { get; set; } string title { get; set; } string description { get; set; } 我想创建一个列表,其中只有all标题在列表中 哪种性能最好 编辑 “我的描述”字段平均为2k个字符。。。我不希望这只会拖慢获得冠军的速度 Edit2 我首先使用MVC的代码(实体框架)。列表存储在_上下文中,我从中查询以获取数据 Edit3如果可能的话。。有没有办法得到头衔和身份证 我想创建一个只包

我目前有一个由以下类别组成的
列表

int id { get; set; }
string title { get; set; }
string description { get; set; }
我想创建一个
列表
,其中只有all标题在列表中

哪种性能最好

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

Edit2 我首先使用MVC的代码(实体框架)。
列表
存储在_上下文中,我从中查询以获取数据

Edit3如果可能的话。。有没有办法得到头衔和身份证

我想创建一个只包含列表中所有标题的
列表

您可以使用投影通过

哪种性能最好

var list=newlist();
var titleList=新列表(List.Count);
foreach(列表中的变量项)
{
标题列表.添加(项目.标题);
}
LINQ的性能不会超过一个简单的
foreach
语句,但这是一个折衷方案,您应该通过基准测试进行评估,因为在大多数情况下差异可以忽略不计


其中,
list
是泛型类型的
list

听起来像是在使用实体框架,在这种情况下,您不会从
列表创建
列表
——您可以直接从
\u上下文中查询
列表

var titles = _context.MyTable.Select(x => x.title).ToList();
是的,您可以同时获得标题和id:

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

这将为您提供一个
列表
,其中
T
是一个匿名类型,其中包括属性
title
id

为什么您认为
描述
属性会降低获取标题的速度?列表是否已初始化?你总是在方法中加载它吗?如果你经常需要的话,也许你可以用一个字段来代替。旁注:你应该遵守。所以属性应该是。我已经更新了我的问题。当我在foreach循环中调用_上下文,然后将结果添加到新列表以返回时,2个结果大约需要2秒钟。不过,我不确定为什么要链接“LINQ中的查询语法和方法语法”。如果OP不熟悉LINQ的不同扩展方法,它将解释这些方法。如果你知道一个更好的链接,我可以交换它。使用foreach循环花了我约4秒钟的时间得到结果。使用.Select()可以将时间缩短到约0.7秒。@Romoku:这令人困惑,因为它表明性能问题与您使用LINQ的方式有关。如果你只是想添加一个教程链接,这可能会更好,因为它更通用:谢谢@Romoku->的更新,但是,我的文章的Edit3有这样的解决方案吗?+1确实有。我使用的是EF,尽管其他答案的变体确实解决了这个谜题。虽然,我已经更新了我的问题,加入了另一个cog。但是只有这个问题涉及到Edit2,没有考虑到描述。如果您也希望获得ID,您可以通过
\u context.MyTable.Select(x=>new{Title=x.Title,ID=x.ID})创建annonymus类型。ToList()@ErenErsönmez明白了<代码>字典返回列表=_context.Articles.Select(o=>new{ID=o.ID,Title=o.Title}).ToDictionary(x=>x.ID,x=>x.Title)
var list = new List<SomeClass>();
var titleList = new List<string>(list.Count);

foreach(var item in list)
{
    titleList.Add(item.title);
}
list.Select(o => o.title).ToList();
var titles = _context.MyTable.Select(x => x.title).ToList();
var titleAndIds = _context.MyTable.Select(x => new{ x.title, x.id}).ToList();