下面的数据只是样本数据
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)
我把它通过想组ID和BatchName选择所有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
添加一个Where条款。Select将始终在 中的每个项目上运行IEnumerable并且必须返回一个值:
Files = y.Where( z => z.File != null).Select(s => s.File)
Run Code Online (Sandbox Code Playgroud)