3

我在产品表中有 dateSend Column 和 dateEdit Column,我可以使用以下代码选择 max dateSend:

(from pro in Products.ToList()
select new { pro.DateSend }).Max();

但我在 dateSend 和 dateEdit 之间有最大值,请帮助我。

4

4 回答 4

8
(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;
}
于 2013-03-27T21:25:50.493 回答
7

如果您不反对放弃查询语法,则更简单:

DateTime max = Products.Max(p=>p.DateSend > p.DateEdit ? p.DateSend : p.DateEdit);
于 2013-03-27T21:36:10.550 回答
1
((from pro in Products.ToList()
select pro.DateSend).Union(
from pro2 in Products.ToList()
select pro.DateEdit
)).Max();
于 2013-03-27T21:25:30.690 回答
0

相同的代码,但使用 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

回顾

  1. 单独声明列项。解析它(如果需要)
  2. 创建一个项目以存储行的最大值(所有列)
  3. 创建一个数组,放入所有声明的项目并将数组分配给之前声明的项目(在步骤2中创建的项目)
  4. 在数组末尾附加 Max 属性,如下所示:{Item1, Item2,...}.Max
  5. Create Select fr 返回 Max 项
  6. 最后附加 linq Max 属性。(MyLinQ).Max

我希望这段代码对某人有所帮助。对不起我的英语不好。

于 2017-06-07T16:50:47.443 回答