将对象列表转换为元组列表而不进行迭代

时间:2013-09-06 18:22:11

标签: c# linq entity-framework generics tuples

我正在尝试将一个额外的参数添加到ef对象列表中以跟踪处理,但我仍然不得不明确地初始化每个列表项。这样做的正确方法是什么?除了简洁之外,在这种情况下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));
}

我搜索了网站但没有成功。

3 个答案:

答案 0 :(得分:12)

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

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

ToList()调用并非完全必要,如果您将其删除,则该方法将返回IEnumerable<Tuple<app_subjects, bool>>。如果您之后要迭代元组集合,则ToList调用应该在强制执行时被删除(枚举IEnumberable),然后您的下一个操作(foreach)将执行相同的操作,使代码表现更差。

答案 1 :(得分:5)

喜欢这个吗?

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

答案 2 :(得分:0)

试试这个。

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