C# 无需迭代即可将对象列表转换为元组列表

C# 无需迭代即可将对象列表转换为元组列表,c#,linq,entity-framework,generics,tuples,C#,Linq,Entity Framework,Generics,Tuples,我试图向ef对象列表中添加一个额外的参数来跟踪处理过程,但我一直遇到必须显式初始化每个列表项的情况。linq的正确方法是什么?除了简洁之外,在这种情况下linq语法还有什么优势吗 List<app_subjects> subjectList = AppMySQLQueries.GetAllSubjects(); List<Tuple<app_subjects, bool>> subjectCollection = new List<Tuple<ap

我试图向ef对象列表中添加一个额外的参数来跟踪处理过程,但我一直遇到必须显式初始化每个列表项的情况。linq的正确方法是什么?除了简洁之外,在这种情况下linq语法还有什么优势吗

List<app_subjects> subjectList = AppMySQLQueries.GetAllSubjects();
List<Tuple<app_subjects, bool>> subjectCollection = new List<Tuple<app_subjects, bool>>(subjectList.Count);

foreach (app_subjects subject in subjectList)
{
     subjectCollection.Add(Tuple.Create(subject, false));
}
List subjectList=appmysqlquerys.GetAllSubjects();
List subjectCollection=新列表(subjectList.Count);
foreach(主题列表中的应用程序主题)
{
subjectCollection.Add(Tuple.Create(subject,false));
}
我在这个网站上搜索没有成功。

像这样吗

subjectList.Select(s => Tuple.Create(s, false)).ToList();
试试这个

List<Tuple<app_subjects, bool>> subjectCollection = subjectList.CovertAll( subject => new Tuple<app_subjects, bool>(){
subject,
false
}).ToList();
List subjectCollection=subjectList.CovertAll(subject=>newtuple(){
主题,,
假的
}).ToList();

您只需要在此处使用一个投影(
Select
),它将lambda表达式中的转换应用于源集合中的每个元素

List<Tuple<app_subjects, bool>> tuples = subjectList.Select(x => new Tuple<app_subjects, bool>(x, false)).ToList();
List tuples=subjectList.Select(x=>newtuple(x,false)).ToList();

ToList()
调用不是完全必要的,如果您删除了它,那么该方法将返回一个
IEnumerable
。如果您只是想在之后迭代元组集合,
ToList
调用应该被删除,因为它强制执行(枚举
IEnumberable
),然后您的下一个操作(foreach)也会这样做,使代码性能更差。

LINQ
可以做到这一点,但它看起来与传统的
for
foreach
非常相似。LINQ也会进行迭代,(内部)@Habib不同的是,使用LINQ,您可能可以推迟工作的执行。@Servy,true,但当他调用list时,给定示例代码,这可能是必要的。@Dantix您通常无法控制在成熟的代码库中使用何种类型的集合。很抱歉,它必须是Tuple.Create(…),而不是new Tuple。很抱歉,lambda“x.subject”无效,因为它解析为ef类中的方法,而不是类本身。@AldoSalzberg是的,我已进行了编辑。我认为
app\u subject
subjectList
集合中对象的属性。因为它实际上只是一个
列表,感谢您对上述内容的澄清。这很有道理。改用ConvertAll。@It'sNotALie。使用ConvertAll的优点是什么?