我陷入了Linq-to-SQL查询。我有一个项目表,每个用户有多个项目。我想获取每个用户所有最新项目的列表。这就是我所拥有的:
var TheList = (from t in MyDataContext.TheTable
where t.SomeDate > DateTime.UtcNow.AddMonths(-3)
group t by t.UserID into TheUserGroups
from g in TheGroups
orderby g.SomeDate descending
select new SomeObject()
{
TheUserID = g.UserID,
.....
}).ToList();
问题在于它返回的是每个用户的所有项目,而不是每个用户的最新元素。我需要更改什么才能获得预期的结果?
答案 0 :(得分:1)
尝试以下操作:
var TheList = (from t in MyDataContext.TheTable
where t.SomeDate > DateTime.UtcNow.AddMonths(-3)
orderby g.SomeDate descending
select new SomeObject()
{
TheUserID = g.UserID,
})
.GroupBy(x => x.TheUserID)
.Select(x => x.FirstOrDefault())
.ToList();
答案 1 :(得分:0)
如果我对您的理解正确:
public class Order
{
public int OrderId { get; set; }
public int UserId { get; set; }
public DateTime Date { get; set; }
public string ItemName { get; set; }
}
table.Where(o => o.Date < DateTime.UtcNow.AddMonths(-3))
.GroupBy(o => o.UserId)
.Select(g => new { UserId = g.Key, LastOrder = g.OrderByDescending(o => o.Date).FirstOrDefault() })
.ToList();