LINQ Где Существует GROUP BY - PullRequest
       14

LINQ Где Существует GROUP BY

0 голосов
/ 03 апреля 2011

Как я могу преобразовать это в LINQ?

SELECT B.SENDER, B.SENDNUMBER, B.SMSTIME, B.SMSTEXT
FROM MESSAGES B
WHERE EXISTS ( SELECT A.SENDER
        FROM MESSAGES A
    WHERE A.SENDER = B.SENDER
    GROUP BY A.SENDER
    HAVING B.SMSTIME = MAX( A.SMSTIME))
GROUP BY B.SENDER, B.SENDNUMBER, B.SMSTIME, B.SMSTEXT ;

Большое спасибо:)

EDIT !!

Разрешено с помощью:

  var Condition = "order by SMSTime desc";      

  IEnumerable<ClassMessaggio> messaggi = Database.Select<ClassMessaggio>(Condition);; // Load all but sorted

  ElencoConversazioni =  messaggi.GroupBy(m => new { m.Number })
                .Select(g => g.OrderByDescending(m => m.SMSTime).First()).ToObservableCollection();

Ответы [ 2 ]

1 голос
/ 03 апреля 2011

Попробуйте

db.Messages.Where(b => b.SmsTime == Messages.Where(a => a.Sender == b.Sender)
                                            .Max(a => a.SmsTime))

Или

db.Messsages.GroupBy(m => new { m.Sender, m.SendNumber })
            .Select(g => g.OrderByDescending(m => m.SmsTime).First())

Где db - ваш DataContext.

0 голосов
/ 03 апреля 2011

Чтобы показать список разговоров вместе с «последним сообщением каждого контакта», вы можете попробовать что-то вроде:

// a query to find the last Sms time per sender
var lastSmsQuery = from m in db.messages
                 group m by m.Sender into grouping
                 select new
                 {
                     Sender = grouping.Key,
                     LastSmsTime = grouping.Max(x => x.SmsTime)
                 };

// a query to find the messages linked to the last Sms per sender
var lastMessageQuery = from m in db.messages
                       join l in lastSmsQuery on new { m.Sender, m.SmsTime } equals new { l.Sender, l.LastSmsTime }
                       select m;

Используемый метод с 2 запросами аналогичен этому вопросу из предыдущегосегодня - Преобразование подзапроса SQL в In в Linq Lambda

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