使用Linq和lambda来压缩列表

jim*_*jim 4 c# linq nhibernate lambda extension-methods

我上课了.

public class MedicalRequest
{
    private int id
    private IList<MedicalDays> Days 
    private string MedicalUser
    ...
}
Run Code Online (Sandbox Code Playgroud)

和另一个

public class MedicalDays
{
    private int id;
    private DateTime? day
    private MedicalRequest request
    ...
}
Run Code Online (Sandbox Code Playgroud)

我有医疗用户,所以我可以选择一个

IList<MedicalRequest> reqList = dao.FindAll(example);
Run Code Online (Sandbox Code Playgroud)

在这一点上我希望能做的就是将医疗日列表弄平并返回DateTime日.

就像是

IList<DateTime> dateList = reqList.SelectMany(i => i.MedicalDays.day);
Run Code Online (Sandbox Code Playgroud)

有人能给我一个正确的方向吗?

谢谢你的时间.

Jon*_*eet 16

你快到了:

IEnumerable<DateTime?> dateList = reqList.SelectMany(i => i.MedicalDays)
                                         .Select(m => m.day);
Run Code Online (Sandbox Code Playgroud)

要么:

IEnumerable<DateTime?> dateList = reqList.SelectMany(i => i.MedicalDays,
                                                     (i, m) => m.day);
Run Code Online (Sandbox Code Playgroud)
  • 如果您需要IList<T>而不是IEnumerable<T>您可以调用ToList()结果
  • 如果您需要使用DateTime而不是DateTime?您可以过滤掉这样的null天:

    IEnumerable<DateTime?> dateList = reqList.SelectMany(i => i.MedicalDays)
                                             .Select(m => m.day)
                                             .Where(x => x.HasValue)
                                             .Select(x => x.Value);
    
    Run Code Online (Sandbox Code Playgroud)


Ben*_*son 5

IEnumerable<DateTime> dateList = reqList.SelectMany(i => i.MedicalDays)
                                        .Select(i => i.day);
Run Code Online (Sandbox Code Playgroud)