LINQ在选择枚举时排除空值

LP1*_*P13 1 c# linq

下面的数据只是样本数据

ID  BatchName       File
===========================
1   Batch1          null 
2   Batch2          "C:\File2_1.pdf"
2   Batch2          "C:\File2_2.pdf"
3   Batch3          "C:\File3_1.pdf"
3   Batch3          "C:\File3_2.pdf"
Run Code Online (Sandbox Code Playgroud)

然后我有一个代表上述数据的类

public class SourceBatch
{
   public int ID {get;set;}
   public string BatchName {get;set;}
   public string File {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我把它通过想组IDBatchName选择所有File该组中到列表中。为此,我有相应的课程

public class DestinationBatch
{
   public int ID {get;set;}
   public string BatchName {get;set;}
   public IEnumerable<string> Files {get;set;} // this is list of string
}
Run Code Online (Sandbox Code Playgroud)

下面是执行此操作的代码

IList<SourceBatch> list = GetSourceList();

var result = list.GroupBy(x => new
{
    ID = x.ID,
    BatchName = x.BatchName
})
.Select(y => new DestinationBatch()
{
     ID = y.Key.ID,
     BatchName = y.Key.BatchName,
     Files = y.Select(z => z.File)
 }).ToList();
Run Code Online (Sandbox Code Playgroud)

除了在一种情况下,这工作正常。
对于Batch1whereFile为 null,其填充Files属性为一条 null 记录。我不想将空文件包含到Files

Bra*_*NET 7

添加一个Where条款。Select将始终在 中的每个项目上运行IEnumerable并且必须返回一个值:

Files = y.Where( z => z.File != null).Select(s => s.File)
Run Code Online (Sandbox Code Playgroud)