Я хочу только выйти из Max StartDate, его кратность дат с тем же CustomNumber
Какие-либо предложения?
Мой упрощенный код
from Cus in Customers
where Cus.CustomNumber == 2
group Cus by new
{ Cus.Name,Cus.City,Cus.StartDate}
into grp
select new
{
Name = grp.Key.Name,
City = grp.Key.City,
StartDate = grp.Key.StartDate,
//I have tried, but it doesnt work for me
//StartDate = grp.Max(Cus=> grp.Key.StartDate)
}
попробуйте под кодом
StartDate = grp.Max(x => x.StartDate)
Вы можете попробовать следующее:
var result = from Cus in Customers
where Cus.CustomNumber == 2
group Cus by new
{ Cus.Name, Cus.StartDate}
into grp
select new
{
Name = grp.Key.Name,
StartDate = grp.Max(x=>x.StartDate)
};
Используя grp
вас есть доступ к случайной группе, которую вы создаете в своем запросе linq, а затем используя метод расширения Max
вы получаете максимальное значение StartDate
в своей группе.
ОБНОВИТЬ
Поскольку теперь у вас есть соединение перед группировкой, вам нужно изменить свой код на следующий:
var result = from res in
(from customer in Customers
join house in Houses
on customer.CustomNumber equals house.CustomNumber
where customer.CustomNumber == 2
select new { Name = customer.Name, StartDate = house.StartDate })
group res by res.Name into grp
select new { Name = grp.Key, StartDate = grp.Max(x=>x.StartDate) };
ОБНОВЛЕНИЕ # 2
Если вы хотите, чтобы вы получили имя и город клиента в своем результате, вы должны использовать следующий код:
var result = from res in
(from customer in Customers
join house in Houses
on customer.CustomNumber equals house.CustomNumber
where customer.CustomNumber == 2
select new { Name = customer.Name, City = customer.Name, StartDate = house.StartDate })
group res by new { res.Name, res.City } into grp
select new
{
Name = grp.Key.Name,
City = grp.Key.City,
StartDate = grp.Max(x=>x.StartDate)
};