我在产品表中有dateSend Column和dateEdit Column,我可以用以下代码选择max dateSend:
(from pro in Products.ToList()
select new { pro.DateSend }).Max();
但我在dateSend和dateEdit之间有最大值,请帮助我。
答案 0 :(得分:7)
(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;
}
答案 1 :(得分:7)
如果您不反对放弃查询语法,则可以更简单:
DateTime max = Products.Max(p=>p.DateSend > p.DateEdit ? p.DateSend : p.DateEdit);
答案 2 :(得分:1)
((from pro in Products.ToList()
select pro.DateSend).Union(
from pro2 in Products.ToList()
select pro.DateEdit
)).Max();
答案 3 :(得分:0)
相同的代码,但有一个LinQ
(From pro in Products.ToList
Let max = {pro.DateSend, pro.DateEdit}.Max
select max).Max
如果专业项目不是有效的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
您可以使用“Iif”替换ValidDateTime。
返回Double项的最大值的其他示例,但在个性化对象(MyObject)中,项是String类型。
(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
<强>小结强>
我希望这段代码对某人有帮助。 抱歉我的英文。