![](/img/trans.png)
[英]LINQ to SQL: GroupBy() and Max() to get the object with latest date
[英]LINQ to SQL Get Latest Date from Object
我已經閱讀了一些內容,包括如何僅選擇LINQ中日期最高的記錄,但我不知道如何將其應用於我的情況(這稍微復雜一些)。
我正在嘗試獲取所有AdjusterProfileStatusItem
但僅選擇最新的s.statusDate
。 當前,該查詢僅返回所有記錄的所有日期。 而我只想要所有記錄的最新日期。
(from u in db.Users
join a in db.Adjusters
on u.id equals a.userID
join s in db.AdminAdjusterStatus
on a.id equals s.adjusterID
where u.userType.ToLower() == "adjuster"
&& s.status.ToLower() == "approved"
&& s.statusDate.Max() // causes syntax error...
select new AdjusterProfileStatusItem
{
user = u,
adjuster = a
})
編輯:
我也嘗試過這給我一個語法錯誤...
(from u in db.Users
join a in db.Adjusters
on u.id equals a.userID
join s in db.AdminAdjusterStatus
on a.id equals s.adjusterID
where u.userType.ToLower() == "adjuster"
&& s.status.ToLower() == "approved"
group new { u, a, s } by s.adjusterID into x
select new AdjusterProfileStatusItem
{
user = u, // u does not exist in context
adjuster = a, // a does not exist in context
status = x.Max(y => y.statusDate) // anonymous type does not contain definition for 'statusDate'
})
我不確定您對Lambda表達式的看法,但是我可能會這樣做:
db.Users
.Join(db.Adjusters,
u => u.Id,
a => a.UserId,
(u, a) => new
{
User = u,
Adjuster = a
})
.Join(db.AdminAdjusterStatus,
a => a.Adjuster.Id,
s => s.AdjusterId,
(a, s) => new
{
User = a.User,
Adjuster = a.Adjuster,
AdminAdjusterStatus = s
})
.Where(x => x.User.userType == "adjuster"
&& x.AdminAdjusterStatus.status == "approved"
&& x.AdminAdjusterStatus.statusDate == db.AdminAdjusterStatus
.Where(y => y.AdjusterId ==
x.AdminAdjusterStatus.AdjusterId)
.Max(z => z.statusDate))
.Select(a => new AdjusterProfileStatusItem
{
user = a.User
adjuster = a.Adjuster
})
**EDIT!!!**
(from u in db.Users
join a in db.Adjusters
on u.id equals a.userID
join s in db.AdminAdjusterStatus
on a.id equals s.adjusterID
where u.userType.ToLower() == "adjuster"
&& s.status.ToLower() == "approved"
&& s.statusDate == GetMaxStatusDate(db.AdminAdjusterStatus.ToList(), s.AdjusterID)
select new AdjusterProfileStatusItem
{
user = u,
adjuster = a
})
private DateTime GetMaxStatusDate(List<AdminAdjusterStatus> statuses, int adjusterId)
{
return (from a in statuses
where a.AdjusterId == adjusterId
group a by a.AdjusterId into values
select values.Max(x => x.statusDate)).FirstOrDefault();
}
OR
(from u in db.Users
join a in db.Adjusters
on u.id equals a.userID
join s in db.AdminAdjusterStatus
on a.id equals s.adjusterID
where u.userType.ToLower() == "adjuster"
&& s.status.ToLower() == "approved"
&& s.statusDate == db.AdminAdjusterStatus
.Where(x => x.AdjusterId == s.AdjusterId)
.Select(y => y.statusDate)
.Max();
select new AdjusterProfileStatusItem
{
user = u,
adjuster = a
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.