2013-05-10 4 views
0

Я видел несколько других сообщений, подобных этому, но не могу полностью решить эту проблему. Если у меня есть форум с несколькими сообщениями, я хочу получить список последних сообщений, но только одно сообщение в потоке. Поэтому я хочу Distinct (threadID), но max (Time). Те, на их собственном легко достаточно, но я хочу также выбрать другие столбцы, связанные с этой конкретной строкойLINQ select different, multiple columns

 var posts = from s in websiteDB.Forum_Post 
        orderby s.Time 
        select new ForumPostSummary() 
        { 
         UserID = s.UserID ?? default(int), 
         Time = s.Time ?? default(int), 
         Subject = s.Subject, 
         ThreadID = s.ThreadID ?? default(int) 
        }; 
     posts = posts.Take(10); 

Пример таблица:

| UserID | Time | Subject | ThreadID | 
| 1  | 10:00 | ABC  | 999  | 
| 2  | 10:01 | Re:DEF | 998  | 
| 3  | 10:02 | Re:ABC | 999  | 
| 4  | 09:40 | DEF  | 998  | 
| 5  | 09:45 | Re:DEF | 998  | 

Я хотел бы строки от идентификатора пользователя 3 (последнее времени для потока 999 и последнего времени в целом) и userID 2 (последнее время для потока 998). Я ссылаюсь на UserID для результатов просто для объяснения, какие строки я хочу. Я действительно запрашиваю данные из базы данных MySQL и вставляю их в SqlExpress, хотя эта проблема применима к обеим базам данных в несколько разных формах!

| 3  | 10:02 | Re:ABC | 999  | 
| 2  | 10:01 | Re:DEF | 998  | 

ответ

2

Это звучит, как вам нужно группы по ThreadID, а затем заказать каждую группу по времени (по убыванию) и взять первое значение из каждой группы. Так что-то вроде:

var posts = from s in websiteDB.Forum_Post 
      group s by s.ThreadID into thread 
      select thread.OrderByDescending(t => t.Time).First() into recent 
      select new ForumPostSummary 
      { 
       UserID = recent.UserID ?? default(int), 
       Time = recent.Time ?? default(int), 
       Subject = recent.Subject, 
       ThreadID = recent.ThreadID ?? default(int) 
      }; 
posts = posts.Take(10); 
+0

Спасибо, Джон. Наверное, я путался с несколькими выборами и группировкой, все в одном и том же запросе! У меня также есть соединение (не в оригинальном вопросе), но мне удалось снова вставить это в порядке. Еще раз спасибо. – GeoffM