Используйте Linq и Lambda, чтобы сгладить список - PullRequest
4 голосов
/ 28 июля 2010

У меня есть класс.

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);

Может ли кто-нибудь дать мне толчок в правильном направлении?

Спасибо за ваше время.

Ответы [ 2 ]

16 голосов
/ 28 июля 2010

Вы почти у цели:

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?, вы можете отфильтровать нулевые дни следующим образом:

    IEnumerable<DateTime?> dateList = reqList.SelectMany(i => i.MedicalDays)
                                             .Select(m => m.day)
                                             .Where(x => x.HasValue)
                                             .Select(x => x.Value);
    
5 голосов
/ 28 июля 2010
IEnumerable<DateTime> dateList = reqList.SelectMany(i => i.MedicalDays)
                                        .Select(i => i.day);
...