Select records that does not exist in another table in Entity Framework

前端 未结 3 1757
情深已故
情深已故 2020-12-15 03:48

I have two tables - \"Customer\" table and \"Blacklist\" customer table. When I blacklist a customer, I put the customerid as a foreign key to Blacklist table.

What

相关标签:
3条回答
  • 2020-12-15 04:29

    What you want is something like the following:

    db.Customers
        .Where(c => !db.Blacklists
            .Select(b => b.CusId)
            .Contains(c.CusId)
        );
    

    EF will happily turn that into a sub-query that will run quite well.

    This pattern works for static lists (creates an IN(a, b, c) expression) as well as other tables. You can use it to check for being in the list or not in the list.

    If you want to test it and see the SQL it generates, I strongly recommend LINQPad (it is free). That's what I use to test out little ideas in LINQ all the time.

    0 讨论(0)
  • 2020-12-15 04:49

    IF in table BlackList yo have a List of Customer You can perform something like

     IEnumerable<Customer> model = (from c in db.Customer
                                    from b in c.BlackList.DefaultIfEmpty()
                                     where b.CusID== null
                                      select new Customer
                                       {
                                            CusId= c.OrderID
                                        }).ToList();
    
    0 讨论(0)
  • 2020-12-15 04:55

    How about something like this:

    var subselect = (from b in BlackList select b.CusId).ToList();
    
    var result = from c in Customer where !subselect.Contains(c.CusId) select c;
    
    0 讨论(0)
提交回复
热议问题