2010-06-07 112 views
3

我有以下代码:添加列表至列表

var columnNames = (from autoExport in dataContext.AutoExports 
       where autoExport.AutoExportTemplate != null 
        && ContainsColumn(autoExport.AutoExportTemplate, realName) 
       select GetDbColumnNames(autoExport.AutoExportTemplate, realName)).ToList(); 

GetDbColumns()返回List<string>功能。 所以columNames的类型是List<List<string>>。 是否有可能创建一个List<string>,所以GetDbColumns的列表中的每个元素被添加到LINQ查询的结果?

回答

4

您可以使用“选择多个”建设:

var columnNames = (
    from autoExport in dataContext.AutoExports 
    where autoExport.AutoExportTemplate != null 
      && ContainsColumn(autoExport.AutoExportTemplate, realName) 
    from column in GetDbColumnNames(autoExport.AutoExportTemplate, realName) 
    select column).ToList(); 

或者这里是使用SelectMany的另一种方式:

var columnNames = (
    from autoExport in dataContext.AutoExports 
    where autoExport.AutoExportTemplate != null 
      && ContainsColumn(autoExport.AutoExportTemplate, realName) 
    select autoExport 
).SelectMany(x => x.GetDbColumnNames(autoExport.AutoExportTemplate, realName)) 
.ToList(); 

最后,这是另一种方式把它(但它包括有些难看的代码x => x):

var columnNames = (
    from autoExport in dataContext.AutoExports 
    where autoExport.AutoExportTemplate != null 
      && ContainsColumn(autoExport.AutoExportTemplate, realName) 
    select autoExport.GetDbColumnNames(autoExport.AutoExportTemplate, realName) 
).SelectMany(x => x).ToList();