2010-07-28 70 views
4

我有一个类。使用Linq和lambda压扁列表

public class MedicalRequest 
{ 
    private int id 
    private IList<MedicalDays> Days 
    private string MedicalUser 
    ... 
} 

和另一

public class MedicalDays 
{ 
    private int id; 
    private DateTime? day 
    private MedicalRequest request 
    ... 
} 

我有MedicalUser所以我能够选择的

IList<MedicalRequest> reqList = dao.FindAll(example); 

我很想能够在这一点上做的是扁平化MedicalDays列表并返回DateTime日。

IList<DateTime> dateList = reqList.SelectMany(i => i.MedicalDays.day); 

东西能有人给我在正确的方向推?

谢谢你的时间。

回答

16

你就要成功了:

IEnumerable<DateTime?> dateList = reqList.SelectMany(i => i.MedicalDays) 
             .Select(m => m.day); 

或者:

IEnumerable<DateTime?> dateList = reqList.SelectMany(i => i.MedicalDays, 
                (i, m) => m.day); 
  • 如果你需要的IList<T>代替IEnumerable<T>您可以在结果
  • 如果需要调用ToList()使用DateTime而不是DateTime?您可以过滤ou Ť空天是这样的:

    IEnumerable<DateTime?> dateList = reqList.SelectMany(i => i.MedicalDays) 
                 .Select(m => m.day) 
                 .Where(x => x.HasValue) 
                 .Select(x => x.Value); 
    
+0

谢谢乔恩一如既往非常有帮助。 – jim 2010-07-28 11:41:42

5
IEnumerable<DateTime> dateList = reqList.SelectMany(i => i.MedicalDays) 
             .Select(i => i.day); 
+0

谢谢你的回应。 – jim 2010-07-28 11:42:55