Рассмотрим следующий запрос:

У меня следующая структура:

Member
{
  public Guid ID
  public string Name
  public virtual ICollection<MemberCategory> MemberCategories { get; set; }

}

MemberCategory
{
  public Guid TribunalMemberID
  public DateTime? AppointedFrom { get; set; }
  public DateTime? ExpiresOn { get; set; }
}

Я хочу иметь возможность перечислить все имена всех участников, которые соответствуют этому запросу, и я думаю, что мне нужно использовать SelectMany, но я могу разработать код.

Я пробовал варианты этого:

(Members - это набор Member)

public IDictionary<Guid, string> Options => Members.
            .SelectMany(tm => tm.MemberCategories)
            .Where(tmc => tmc.AppointedFrom <= DateTime.Today && tmc.ExpiresOn > DateTime.Today)
            .ToDictionary(tm => tm.ID, t => $"{tm.Name}");

Но я не могу понять, как запросить коллекцию в списке участников, чтобы вернуться к списку участников и посмотреть, что соответствует.

В идеале я хочу вернуть идентификатор участника и имя

Я надеюсь, что в этом есть смысл. Кто-нибудь может помочь?

1
dstewart101 5 Май 2021 в 00:27

1 ответ

Лучший ответ

Вы можете добиться этого с помощью метода .Any()

var collection = members.Where(x => 
    x.MemberCategories.Any(tmc => tmc.AppointedFrom <= DateTime.Today && tmc.ExpiresOn > DateTime.Today))
        ToList();
1
James Lieu 4 Май 2021 в 22:05