LINQ Query for Unsanitized Data - PullRequest
       2

LINQ Query for Unsanitized Data

0 голосов
/ 29 февраля 2020

У меня есть List<MyData>, где MyData содержит поле Location.

Это поле является строкой и обычно имеет формат «Город, штат», но иногда может отображаться как «Неизвестно». ".

Есть еще одно поле, DateField.

Мне нужно вернуть список MyData объектов, сгруппированных по году в DateField, сгруппированных по состоянию часть Location, если таковая существует. Если он появляется как «Неизвестный», тогда я должен игнорировать это.

Мои мысли используют RemoveAll() на List<>, где (r => r.Location.Split(",").Length == 0), или если он вообще не содержит запятую.

Тогда я буду очищать данные.

Это оставляет меня с двумя вопросами:

  1. Это правильный подход, или я могу просто обработать все это одним запросом LINQ?
  2. Что должен этот LINQ запрос похож? Я просматриваю итоги по годам с указанием c года, который передается в API как int.

Надеюсь, это ясно. Спасибо.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2020

Если я вас правильно понял, вы можете попробовать сделать следующее. Сначала отфильтруйте данные по известным Location, затем сгруппируйте их по двум ключам, год из DateField и State, и, наконец, выберите результат

var data = new List<MyData>();
var result = data.Where(l => l.Location != "Unknown")
    .GroupBy(d => new { d.DateField.Year, State = d.Location.Split(",").LastOrDefault() })
    .Select(g => new
    {
        g.Key.Year,
        g.Key.State,
        Total = g.Count()
    });
1 голос
/ 29 февраля 2020

Этот запрос удаляет состояние с unkonwn, а также группирует по году в поле даты и части состояния местоположения

var mydata = new List<MyData>();
mydata.Where(x => x.Location != "Unknown")
       .GroupBy(x => new { x.DateField.Date.Year, State = 
                x.Location.Split(',').LastOrDefault() })
       .Select(x => new {

                    Year = x.Key.Year,
                    Count = x.Count()
              });


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...