簡體   English   中英

C#Linq如何在我需要不為空的同一列中檢查空值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM