如何检查从LINQ返回的负值

时间:2013-03-28 11:53:37

标签: c# asp.net linq asp.net-3.5

我正在使用LINQ来获取我的正确数据,在这个LINQ中调用一个方法来检查日期差异。如果日期差异变为负值,LINQ会返回匿名类型。如何处理这个以及如何得到这个负面数字,因为我还需要这个以供我进一步使用。

var daysCount = (from projCount in dtExpiring.AsEnumerable()
                 where projCount.Field<int>("AccountId") == accId
                 && (checkDate(projCount.Field<DateTime>("ValidFor"))) <= 5
                 && (checkDate(projCount.Field<DateTime>("ValidFor"))) >= 0
                 select new { daysRemain = (checkDate(projCount.Field<DateTime>("ValidFor"))) }).Distinct();
private int checkDate(DateTime validFor)
{
    try
    {
         DateTime date = DateTime.Now;
          int diffDays = Convert.ToInt32(Math.Round((validFor - date).TotalDays));

          return diffDays;
      }
      catch (Exception)
      {
           return 0;
      }
 }

1 个答案:

答案 0 :(得分:1)

编辑:如果我理解正确,那么您当前的LINQ查询不会返回负天差,您也希望如此。如果是这种情况,那么你必须删除支票

&& (checkDate(projCount.Field<DateTime>("ValidFor"))) >= 0

因为它只选择0或正天数的记录。


(旧答案)

您也可以在匿名对象中选择AccountID,以便将返回的差异与记录相关联。类似的东西:

select new { daysRemain = (checkDate(projCount.Field<DateTime>("ValidFor"))),
             accID =  projCount.Field<int>("AccountId"})

然后:

foreach(var item in daysCount)
{
    Debug.WriteLine("{0},{1}", item.accID, item.daysRemain);
}

要获得负数的AccID,您可以尝试:

var negativeAccIDs = daysCount.Where(r=> r.daysRemain < 0);