如何将查询结果选择为多个列表?例如,
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的问题是我使用两倍的内存。当数据集很大时,它可能会成为一个问题。
答案 0 :(得分:4)
方法1的问题是我需要运行两次查询。方法2的问题是我使用两倍的内存。当数据集很大时,它可能会成为一个问题。
这些权衡中的任何一个都可能足够,但这取决于最终的数据集和用例。
但是,如果你想完全避免这种权衡,你可以。解决这个问题的方法是不使用Linq:
var firstNames = new List<string>();
var lastNames = new List<string>();
foreach(var person in query)
{
firstNames.Add(person.FirstName);
lastNames.Add(person.LastName);
}
这可以避免两个查询以及项目的“复制”,因为您只枚举一次查询结果,并且不存储任何额外信息。
答案 1 :(得分:0)
方法2的问题是我使用了两倍的内存。
错误。测量它。字符串实例被重用。