2009-03-09 8 views
5

J'ai deux tables dans un jeu de données XML. T1, T2. Chacune des tables a une colonne ID.Besoin d'aide pour une requête de jointure Inverser vers Inner à l'aide de LINQ

T1 a une liste de clients T2 a une liste de commandes

Je veux construire une requête LINQ qui retourne uniquement l'ID des clients qui ne disposent pas de commandes. En d'autres termes, les identifiants clients qui n'existent pas dans la table T2.

Oh oui, je suis en utilisant C#

Merci!

Répondre

6

Je pense que cela fonctionnera (s'il vous plaît adapter à vos jeux de données):

var query = from c in T1 
      where !(from o in T2 select o.CustomerID) 
      .Contains(c.CustomerID) 
      select c; 
+0

Wow - C'était simple! Merci pour l'aide – Rick

1

Vous avez besoin de nous juste une clause where et tout:

T1.Where(item1 => T2.All(item2 => item1.ID != item2.ID)); 
+0

On dirait que cela aurait fonctionné aussi! Merci pour l'aide. – Rick

7

Cela nécessite une jointure externe et un chèque sur null.

var result = from c in Customers 
      join d in Details on d.CustomerID equals c.ID into g 
      where !g.Any() 
      select c; 
+0

Cela semble être plus rapide que la réponse acceptée – Stefanvds