2

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

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 的问题是我使用了两倍的内存。当数据集很大时,它可能会成为一个问题。

4

2 回答 2

5

方法 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);
}

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

于 2012-06-27T15:56:46.557 回答
0

方法 2 的问题是我使用了两倍的内存。

错误的。测量它。字符串实例被重用。

于 2012-06-27T18:30:14.463 回答