1

我正在使用 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;
      }
 }
4

1 回答 1

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);
于 2013-03-28T12:00:01.283 回答