475 votes

Quelle est la syntaxe pour une jointure interne dans linq to sql?

Je suis en train d'écrire un linq to sql et je suis juste après la syntaxe standard pour une jointure interne avec un " on " de la clause en C#.

c'est à dire comment représentez-vous cela dans LINQ to SQL?:

select * from table1 
inner join table2 on table1.field = table2.field

EDIT: Réel requête pour obtenir tous les contacts pour un courtier:

select DealerContact.*
from Dealer 
    inner join DealerContact on Dealer.DealerID = DealerContact.DealerID

606voto

Jon Limjap Points 46429

Il va quelque chose comme:

from t1 in db.Table1
join t2 in db.Table2 on t1.field equals t2.field
select new { t1.field2, t2.field3}

Il serait agréable d'avoir judicieux des noms et des champs de vos tables pour un meilleur exemple. :)

Mise à jour

Je pense que pour votre question de ce qui pourrait être plus approprié:

var dealercontacts = from contact in DealerContact
                     join dealer in Dealer on contact.DealerId equals dealer.ID
                     select contact;

Puisque vous êtes à la recherche pour les contacts, pas les marchands.

246voto

Clever Human Points 3174

Et parce que je préfère l'expression de la chaîne de la syntaxe, voici comment vous le faites avec:

var dealerContracts = DealerContact.Join(Dealer, 
                                 contact => contact.DealerId,
                                 dealer => dealer.DealerId,
                                 (contact, dealer) => contact);

45voto

herste Points 201
var results = from c in db.Companies
              join cn in db.Countries on c.CountryID equals cn.ID
              join ct in db.Cities on c.CityID equals ct.ID
              join sect in db.Sectors on c.SectorID equals sect.ID
              where (c.CountryID == cn.ID) && (c.CityID == ct.ID) && (c.SectorID == company.SectorID) && (company.SectorID == sect.ID)
              select new { country = cn.Name, city = ct.Name, c.ID, c.Name, c.Address1, c.Address2, c.Address3, c.CountryID, c.CityID, c.Region, c.PostCode, c.Telephone, c.Website, c.SectorID, Status = (ContactStatus)c.StatusID, sector = sect.Name };


return results.ToList();

25voto

aku Points 54867

L'utilisation de Linq Rejoindre opérateur:

var q =  from d in Dealer
         join dc in DealerConact on d.DealerID equals dc.DealerID
         select dc;

23voto

the_joric Points 4755

fondamentalement, LINQ rejoindre opérateur ne fournit aucune prestation pour SQL. I. e. la requête suivante

var r = from dealer in db.Dealers
   from contact in db.DealerContact
   where dealer.DealerID == contact.DealerID
   select dealerContact;

entraînera une JOINTURE INTERNE en SQL

rejoindre est utile pour IEnumerable<> parce que c'est plus efficace:

from contact in db.DealerContact  

la clause sera ré-exécutée pour chaque concessionnaire Mais pour IQueryable<> il n'est pas le cas. Également rejoindre est moins souple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X