我在产品表中有 dateSend Column 和 dateEdit Column,我可以使用以下代码选择 max dateSend:
(from pro in Products.ToList()
select new { pro.DateSend }).Max();
但我在 dateSend 和 dateEdit 之间有最大值,请帮助我。
(from pro in Products.ToList()
let max = Max(pro.DateSend, pro.DateEdit)
select max).Max()
static DateTime? Max(DateTime? a, DateTime? b)
{
if (!a.HasValue && !b.HasValue) return a; // doesn't matter
if (!a.HasValue) return b;
if (!b.HasValue) return a;
return a.Value > b.Value ? a : b;
}
如果您不反对放弃查询语法,则更简单:
DateTime max = Products.Max(p=>p.DateSend > p.DateEdit ? p.DateSend : p.DateEdit);
((from pro in Products.ToList()
select pro.DateSend).Union(
from pro2 in Products.ToList()
select pro.DateEdit
)).Max();
相同的代码,但使用 One LinQ
(From pro in Products.ToList
Let max = {pro.DateSend, pro.DateEdit}.Max
select max).Max
如果 pro 项目不是有效的 DateTime,它将崩溃或返回意外结果。
其他解决方案(解析产品列表项):
(From pro in Products.ToList
Let DSend as DateTime = Convert.ToDateTime(Iif(ValidDateTime(pro.DateSend), pro.DateSend, DateTime.MinValue))
Let DEdit as DateTime = Convert.ToDateTime(Iif(ValidDateTime(pro.DateEdit), pro.DateEdit, DateTime.MinValue))
Let MaxDate as DateTime= {DSend, DEdit}.Max
select MaxDate).Max
private function ValidDateTime(ByVal Dat as Object) as Boolean
if Dat Is Nothing OrElse IsDbNull(Dat) OrElse String.IsNullOrEmpty(Dat) then
return false
end if
return true
end function
您可以将 ValidDateTime 替换为“Iif”。
其他示例返回 Double 项目的最大值,但在个性化对象(MyObject)中,项目是字符串类型。
(From Item as MyObject in MyListOfObject
Let Frec as Double = Convert.ToDouble(Iif(String.IsNullOrEmpty(Item.Frecuency),0,Item.Frecuency))
Let Pot as Double = Convert.ToDouble(Iif(String.IsNullOrEmpty(Item.Power),0,Item.Power))
Let max as Double= {Frec, Pot}.Max
select max).Max
回顾
我希望这段代码对某人有所帮助。对不起我的英语不好。