如何将查询结果选择到多个列表中?例如,
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/