Left/Right/Inner joins using C# and LINQ

Posted by Keith Barrows on Stack Overflow See other posts from Stack Overflow or by Keith Barrows
Published on 2010-04-16T20:54:59Z Indexed on 2010/04/16 23:23 UTC
Read the original article Hit count: 288

I am trying to figure out how to do a series of queries to get the updates, deletes and inserts segregated into their own calls. I have 2 tables, one in each of 2 databases. One is a Read Only feeds database and the other is the T-SQL R/W Production source. There are a few key columns in common between the two.

What I am doing to setup is this:

List<model.AutoWithImage> feedProductList = _dbFeed.AutoWithImage.Where(a => a.ClientID == ClientID).ToList();
List<model.vwCompanyDetails> companyDetailList = _dbRiv.vwCompanyDetails.Where(a => a.ClientID == ClientID).ToList();
foreach (model.vwCompanyDetails companyDetail in companyDetailList)
{
    List<model.Product> productList = _dbRiv.Product.Include("Company").Where(a => a.Company.CompanyId == companyDetail.CompanyId).ToList();
}

Now that I have a (source) list of products from the feed, and an existing (target) list of products from my prod DB I'd like to do 3 things:

  1. Find all SKUs in the feed that are not in the target
  2. Find all SKUs that are in both, that are active feed products and update the target
  3. Find all SKUs that are in both, that are inactive and soft delete from the target

What are the best practices for doing this without running a double loop? Would prefer a LINQ 4 Objects solution as I already have my objects.

EDIT: BTW, I will need to transfer info from feed rows to target rows in the first 2 instances, just set a flag in the last instance.

TIA

© Stack Overflow or respective owner

Related posts about c#

Related posts about linq-to-entities