我想从我的"类别"中返回所有值。表并将其加入我的" CategorySelections"表以显示所有类别以及指定的用户是否选择了它们。 复杂性(我不知道如何在LINQ中处理)是用户可以随着时间的推移改变他对特定类别的选择/取消选择...每个更改都会记录在" CategorySelections& #34;带有日期戳的桌子。 我是最后一个选择状态。
以下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工作; "新选择()"指的是我的模型
答案 0 :(得分:1)
您可以添加WHERE语句:
where cs.CreatedOn == CategorySelections.Where(t => t.CategoryId == cs.CategoryId).Max(r => r.CreatedOn)