我想从我的“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 工作;“新选择()”是指我的模型