[英]c# linq how to check for null values in the same column that i need to be not null
我在linq中有此查詢
var finalResults = (from r in results.AsEnumerable()
where DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
有時SentOn
列可能為null,而我想忽略這些情況。 如何刪除這些無效的情況?
如果需要的話,我們可以做一個臨時表(另一個),該表只有非空值,我可以繼續
該表是results
,所以我可以有另一個表,可以說results2
不具有空值或SentOn
?
如果SentOn
字段可以為null
,則必須返回DateTime?
而不是DateTime
。
嘗試:
var finalResults = (from r in results.AsEnumerable()
where r.Field<DateTime?>("SentOn") != null &&
DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
或者,如注釋中指出的,您可以使用DataRow.IsNull
。
var finalResults = (from r in results.AsEnumerable()
where !r.IsNull("SentOn") &&
DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
只需在您的WHERE
子句中添加測試:
var finalResults = (from r in results.AsEnumerable()
where !r.IsNull("SentOn")
&& DateTime.Now.Subtract(
r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
您需要使用IsNull
方法首先檢查該值是否為null。 可以按照以下步驟進行:
var finalResults = (from r in results.AsEnumerable()
where !r.IsNull("SentOn") &&
DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7
select r
).ToList();
您可以使用.if語句在.Where方法中進行檢查:
var finalResults = results.AsEnumerable().Where(r =>
{
if(r.Field<DateTime?>("SentOn") == null) return false;
return DateTime.Now.Subtract(r.Field<DateTime?>("SentOn")).Minutes > 7;
}).ToList();
嘗試這個
dt.AsEnumerable().Where(r => r.Field<DateTime?>("SentOn") != null && DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7);
空檢查就足夠了。
var finalResults = results.AsEnumerable().Select(r => !r.IsNull(("SentOn"))
&& DateTime.Now.Subtract(r.Field<DateTime>("SentOn")).Minutes > 7)
如果這是重復模式,則可以創建擴展方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.