c # Linq отфильтровывает записи из списка в словаре - PullRequest
1 голос
/ 05 января 2011

Это сложно объяснить и, вероятно, очень просто сделать.

1) У меня есть словарь. (Переменная _output)

2) Внутри NotificationWrapper у меня есть список.

3) Внутри этого списка у меня есть некоторые требования, которым я должен соответствовать.

4) Если эти требования совпадают, я хочу вернуть NotificationWrapper из словаря. (_Output.value)

Я пробовал что-то вроде этого:

var itemsToSend = 
  _output.Where(
      z => z.Value.Details.Where(
          x => DateTime.Now >= x.SendTime && 
          x.Status == SendStatus.NotSent && 
          x.TypeOfNotification == UserPreferences.NotificationSettings.NotificationType.Email
      )
  ).Select().ToList();

Итак, я хочу, чтобы записи _output соответствовали условию внутри самой записи. Поэтому для каждой записи, которую я перебираю, я проверяю значения в списке в этой записи, чтобы увидеть, была ли она отправлена ​​или нет. Если он не был отправлен, то я хочу вернуть этот элемент _output.value. itemsToSend должен содержать записи _output, которые не были отправлены. (Не некоторые значения внутри _output.value.xxx)

Ответы [ 2 ]

5 голосов
/ 05 января 2011

Скомпилировано в Google Chrome:)

var itemsToSend = _output
    .Values
    .Where(n => n.Details.Any(
        x => DateTime.Now >= x.SendTime && 
        x.Status == SendStatus.NotSent && 
        x.TypeOfNotification == UserPreferences.NotificationSettings.NotificationType.Email))
    .ToList();

т.е. Я думаю, что вы ищете Any().

0 голосов
/ 05 января 2011

Как то так?

public partial class Form1 : Form
{
    public Number SomeNumber { get; set; }
    public Form1()
    {
        InitializeComponent();

        var _output = new Dictionary<int, List<Number>>
                          {
                              {
                                  1, new List<Number>
                                         {
                                             new Number {details = new Number.Details{a = true, b = true, c = true}},
                                             new Number {details = new Number.Details{a = false, b = false, c = false}},
                                             new Number {details = new Number.Details{a = true, b = true, c = false}},
                                             new Number {details = new Number.Details{a = false, b = false, c = false}},
                                             new Number {details = new Number.Details{a = true, b = true, c = true}},
                                         }
                                  }
                          };

        var itemsToSend = (from kvp in _output
                           from num in kvp.Value
                           where num.details.a && num.details.b && num.details.c
                           select num).ToList();
    }

}

public class Number
{
    public Details details { get; set; }
    public class Details
    {
        public bool a;
        public bool b;
        public bool c;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...