1

我想从我的“Categories”表中返回所有值并将其加入我的“CategorySelections”表以显示所有类别以及指定用户是否选择了它们。一个复杂的问题(我不知道如何在 LINQ 中处理)是用户可能会随着时间的推移更改他对特定类别的选择/取消选择......每次更改都会在“CategorySelections”表中记录一个日期邮票。我在最后一个选择状态之后。

以下 SQL 查询执行我想要的操作:

     SELECT cs.UserId, c.CategoryId, m.MaxDate, cs.IsSelected
  FROM [myDB].[dbo].[Categories] c
  LEFT JOIN [myDB].[dbo].[CategorySelections] cs
  ON c.CategoryID = cs.CategoryID AND cs.UserID = 7
  INNER JOIN
  (
    SELECT UserId, CategoryId, Max(CreatedOn) as MaxDate
    FROM [myDB].[dbo].[CategorySelections]
    GROUP BY UserId, CategoryId
  ) m
  ON cs.UserID = m.UserID AND cs.CategoryID = m.CategoryID AND cs.CreatedOn = m.MaxDate
  ORDER BY cs.CategoryI

我需要一些帮助才能在 LINQ 中完成这项工作。下面是我的尝试,它返回所有选择,而不仅仅是每个类别的最后一个。

var query = from c in db.Category
join cs in db.CategorySelection.Where(x => x.UserID == WebSecurity.CurrentUserId)
on c.CategoryID equals cs.CategoryID into JoinedCategory
from cs in JoinedCategory.DefaultIfEmpty()
select new Selection() { CategoryID = c.CategoryID, CategoryName = c.CategoryName       ,IsSelected = cs != null ? cs.IsSelected : false }

我在 MVC 工作;“新选择()”是指我的模型

4

1 回答 1

1

您可以添加 WHERE 语句:

where cs.CreatedOn == CategorySelections.Where(t => t.CategoryId == cs.CategoryId).Max(r => r.CreatedOn)
于 2013-05-26T10:32:40.417 回答