我正在使用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;
}
}
答案 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);