c# - Linq:将数据选择到多个列表中

标签 c# linq entity-framework linq-to-sql

如何将查询结果选择到多个列表中?例如,

class Person 
{
   public string FirstName {get;set;}
   public string LastName {get;set;}
}

void test()
{
   var query =
     from i in Persons
     select i;

   // now i want to select two lists - list of first names, and list of last names

   // approach 1 - run query twice?
   List<string> f = query.Select( i=>i.FirstName).ToList();
   List<string> l = query.Select( i=>i.LastName).ToList();

   // approach 2 - turn it into a list first, and break it up
   List<Person> p = query.ToList();
   List<string> f = p.Select( i=>i.FirstName).ToList();
   List<string> l = p.Select( i=>i.LastName).ToList();
}

方法 1 的问题是我需要运行查询两次。 方法 2 的问题是我使用了两倍的内存。当数据集很大时,这可能会成为一个问题。

最佳答案

Problem with approach 1 is I need to run the query twice. Problem with approach 2 is I use twice the memory. When the data set is huge, it may become an issue.

这些权衡中的任何一个都可能是足够的,但这取决于生成的数据集和用例。

但是,如果您想完全避免这种权衡,您可以。解决这个问题的方法是不使用 Linq:

var firstNames = new List<string>();
var lastNames = new List<string>(); 
foreach(var person in query)
{
   firstNames.Add(person.FirstName);
   lastNames.Add(person.LastName);
}

这避免了两次查询以及项目的“复制”,因为您只枚举查询结果一次,并且不存储任何额外信息。

关于c# - Linq:将数据选择到多个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11230324/

相关文章:

javascript - 将列表分成div以一次只显示一个

c# - 使用 LINQ 获取特定子类型的列表条目

c# - 获取对象内的所有关联/复合对象(以抽象方式)

c# - 整数方法总是返回 "-1"?

c# - 数据库优先 Entity Framework

c# - C# 中的真实文字和类型转换有什么区别?

c# - 使用 Clone() 复制 ASP.NET MVC/Entity Framework 模型对象

c# - Linq OrderBy 不对 List<T> 进行排序。我如何对列表进行排序?

c# - 为什么我的绑定(bind)参数都相同(使用 Linq)?

c# - 需要做搜索