2009-03-06 43 views
0

这是我有的LINQ查询,它获得每个选定列的唯一值,并将它们存储为一个字典中的列表。如何简化这个LINQ查询与不同的每列到一个语句

var serialTable = serialNoAdapter.GetData(); 
var distinctValue = (from row in serialTable 
        select new 
        { 
         row.CodePractice, 
         row.LockType, 
         row.Software 
        }).Distinct().ToList(); 
var softwareValue = distinctValue.Select(p => p.Software).Distinct().ToList(); 
var codeValue = distinctValue.Select(p => p.CodePractice).Distinct().ToList(); 
var lockValue = distinctValue.Select(p => p.LockType).Distinct().ToList(); 

return new Dictionary<string, List<string>>() 
     { 
      {"software", softwareValue}, 
      {"codepractice", codeValue}, 
      {"locktype", lockValue} 
     }; 

唯一的问题是它被分解成几个语句。我的问题是,是否有可能将其简化并将其压缩为单个语句?

回答

2

我相信你可以通过省略中间步骤来大幅简化它。

var softwareValue = serialTable.Select(p => p.Software).Distinct().ToList(); 
var codeValue = serialTable.Select(p => p.CodePractice).Distinct().ToList(); 
var lockValue = serialTable.Select(p => p.LockType).Distinct().ToList(); 

return new Dictionary<string, List<string>>() 
     { 
      {"software", softwareValue}, 
      {"codepractice", codeValue}, 
      {"locktype", lockValue} 
     }; 

也许别人可以进一步提高。

+1

用这种方法,我认为你是查询数据库3次而不是1 ...是这样吗? – Graviton 2009-03-06 05:37:00