簡體   English   中英

C# LINQ select 來自數據庫中不包含值的列表

[英]C# LINQ select from List where value is not contained in database

我正在研究 .NET CORE 5 應用程序以及 Entity Framework CORE。 我有字符串列表,我需要從列表中過濾掉數據庫中不存在的記錄,以便我只能處理這些記錄。 在接下來的嘗試中,我收到 null 錯誤。 我正在使用 Contain 但不確定它是否真的適合,例如我有大約 4000 條記錄

error

   Value cannot be null. (Parameter 'value')

Code

 List<string> PaymentSourceReferences = new List<string>();
        PaymentSourceReferences.Add("e3gdf210-f933-ec11-xxxx-00505691aaaa");
        PaymentSourceReferences.Add("gg34b580-f843-ec11-xxxx-00505691rrrr");
        PaymentSourceReferences.Add("43gf353d-f8fe-ec11-xxxx-00505691tttr");
        PaymentSourceReferences.Add("h4gd5170-7943-ec11-xxxx-00505687bbbb");
        PaymentSourceReferences.Add("4gdv5170-7965-ec11-xxxx-005056874gdg");

   var d2 = (from x in PaymentSourceReferences
             where !x.Contains(db.myTable)
             select PaymentSourceReference).ToList();
var d2 = PaymentSourceReferences.Where(x => !db.myTable.Any(t => t.Id == x)).ToList();

這些當您的PaymentSourceReference是 null 時。您不能將 null 傳遞給Contains如果其 null 例如,您可以分配空字符串。 PaymentSourceReference??String.Empty

下面我修改了你的代碼,你可以檢查里面的 contains 方法


List<string> PaymentSourceReferences = new List<string>();
        PaymentSourceReferences.Add("e3gdf210-f933-ec11-xxxx-00505691aaaa");
        PaymentSourceReferences.Add("gg34b580-f843-ec11-xxxx-00505691rrrr");
        PaymentSourceReferences.Add("43gf353d-f8fe-ec11-xxxx-00505691tttr");
        PaymentSourceReferences.Add("h4gd5170-7943-ec11-xxxx-00505687bbbb");
        PaymentSourceReferences.Add("4gdv5170-7965-ec11-xxxx-005056874gdg");

  string PaymentSourceReference = null;
   var d2 = (from x in PaymentSourceReferences
             where !x.Contains(PaymentSourceReference??String.Empty)
             select PaymentSourceReference).ToList();

找到答案;

  var existingPaymentReferences = 
           (from payment in db.BoPcnPayments
            where PaymentSourceReferences.Contains(payment.PaymentSourceReference)
            select payment.PaymentSourceReference).ToList();

  var paymentReferencesToProcess = 
           (from csvPayements in PaymentSourceReferences
            where !existingPaymentReferences.Contains(csvPayements)
            select csvPayements).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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