LINQ to SQL: данные из двух несвязанных таблиц, сортировка по дате - PullRequest
0 голосов
/ 21 декабря 2009

У меня есть две таблицы tblActionLog и tblLoginLog.

Это tblActionLog:

tblActionLog
------------
ID (int)
Happened (DateTime)
...etc.

Это tblLoginLog:

tblLoginLog
-----------
ID (int)
LoginDate (DateTime)
...etc.

Теперь я хочу, чтобы GridView с информацией из обеих этих таблиц чередовались друг с другом так, чтобы сортировалась их отдельная информация о дате, например ::

LOG OF STUFF
-------------------------------
DATE        |  WHAT     
2009-09-09  | Anderson logged in.
2009-09-08  | Smith made an action.
2009-09-08  | Smith logged in.
2009-09-06  | Anna made an action.
2009-09-04  | Smith made an action.

Надеюсь, это достаточно ясно. Я хочу получить всю эту информацию в одном запросе LINQ (не обязательно один запрос SQL). Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 21 декабря 2009

Вот еще один способ сделать это ...

(from a in dataContext.tblActionLog
 select new
 {
    Date = a.Date,
    What = a.WhatHappened
 }).Union
      (from l in dataContext.tblLoginLog
       select new 
       {
           Date = l.Date,
           What = l.WhatHappened
       }).OrderByDescending(c => c.Date);

Конечно, вы должны заменить фактическое имя вашего объекта DataContext и фактическое имя столбца, чтобы показать, что произошло (так как это не было указано в вашей схеме таблицы).

0 голосов
/ 21 декабря 2009

Возможно, вы хотите использовать Select () и Union () для сопоставления результатов.

var query = context.Logins.Where( l => l.UserID == userID )
                          .Select( l => new { Date = l.Date, What = "logged in" } )
                  .Union( context.Actions.Where( a => a.UserID == userID )
                                          .Select( a => new { Date = a.Date, What = a.Action  } ))
                  .OrderBy( r => r.Date );

Примечание : вам может потребоваться материализовать каждый подзапрос (используйте ToList () или AsEnumerable ()), но я думаю, что LINQ2SQL должен иметь возможность напрямую создавать UNION. Кроме того, это полностью не проверено - напечатано прямо в редакторе ответов, и я не проверял сигнатуру метода Union, поэтому вам может потребоваться настроить.

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