Как использовать запрос linq в списке, чтобы найти последние данные по имени и номеру c #? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть список, но я десерилизую эти данные в класс c #.

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

static IMessageReceiver messageReceiver;

            IList<Message> messages = await messageReceiver.ReceiveAsync(10);
     List<Myclass> list = null;
                foreach (var message in messages)
                {
                    var mydata = Encoding.UTF8.GetString(message.Body);

                    var newdata = JsonConvert.DeserializeObject<Myclass>(mydata);

var result = list.GroupBy(x => new { x.name, x.number })
    .Select(y => y.OrderByDescending((z => z.updatedAt))).ToList();

}
again have to use for loop to process result message one by one 

  public class Myclass
    {
        public string number { get; set; }
        public string name { get; set; }
        public DateTime updatedAt { get; set; }

newdata будет содержать только одно значение, если мне нужно взять список Myclass в то время как DeserializeObject для фильтрации данных?

1 Ответ

0 голосов
/ 28 июня 2018

Если я вас правильно понимаю, это то, что вы хотите:

После десериализации данных вы получаете список, а затем фильтруете его:

var result = list.GroupBy(x => new { x.name, x.number })
    .Select(y => y.OrderByDescending((z => z.updatedAt))).ToList();

EDIT:

Если вы хотите сделать это только с 1 циклом, вы можете сделать что-то вроде:

List<Tuple<string, string, DateTime>> latestAdded = new List<Tuple<string, string, DateTime>>();

var item = latestAdded.Where(x => x.Item1 == newdata.name && x.Item2 == newdata.number).FirstOrDefault();

if (item == null)
{
    latestAdded.Add(new Tuple<string, string, DateTime>(newdata.name, newdata.number, newdata.updatedAt));
}
else
{
    if(item.updatedAt > newdata.updatedAt)
    {
        item.updatedAt = newdata.updatedAt;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...