Question

J'écris une instruction LINQ to SQL et je recherche la syntaxe standard pour une jointure interne normale avec un ON clause en C#.

Comment représentez-vous les éléments suivants dans LINQ to SQL :

select DealerContact.*
from Dealer 
inner join DealerContact on Dealer.DealerID = DealerContact.DealerID
Était-ce utile?

La solution

Cela ressemble à 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}

Ce serait bien d'avoir des noms et des champs sensés pour vos tables pour un meilleur exemple.:)

Mise à jour

Je pense que pour votre requête, cela pourrait être plus approprié :

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

Puisque vous recherchez les contacts, pas les revendeurs.

Autres conseils

Et parce que je préfère la syntaxe de la chaîne d’expression, voici comment procéder :

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

Pour étendre la syntaxe de la chaîne d'expression répondre par Clever Humain :

Si vous souhaitez faire des choses (comme filtrer ou sélectionner) sur les champs des deux tables jointes -- au lieu de cela sur une seule de ces deux tables -- vous pouvez créer un nouvel objet dans l'expression lambda du paramètre final de la méthode Join. incorporant ces deux tableaux, par exemple :

var dealerInfo = DealerContact.Join(Dealer, 
                              dc => dc.DealerId,
                              d => d.DealerId,
                              (dc, d) => new { DealerContact = dc, Dealer = d })
                          .Where(dc_d => dc_d.Dealer.FirstName == "Glenn" 
                              && dc_d.DealerContact.City == "Chicago")
                          .Select(dc_d => new {
                              dc_d.Dealer.DealerID,
                              dc_d.Dealer.FirstName,
                              dc_d.Dealer.LastName,
                              dc_d.DealerContact.City,
                              dc_d.DealerContact.State });

La partie intéressante est l'expression lambda à la ligne 4 de cet exemple :

(dc, d) => new { DealerContact = dc, Dealer = d }

...où nous construisons un nouvel objet de type anonyme qui a comme propriétés les enregistrements DealerContact et Dealer, ainsi que tous leurs champs.

Nous pouvons ensuite utiliser les champs de ces enregistrements lorsque nous filtrons et sélectionnons les résultats, comme le montre le reste de l'exemple, qui utilise dc_d comme nom pour l'objet anonyme que nous avons construit et qui possède à la fois les enregistrements DealerContact et Dealer comme propriétés.

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();

Utiliser Rejoindre Linq opérateur:

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

Vous créez une clé étrangère et LINQ-to-SQL crée des propriétés de navigation pour vous.Chaque Dealer aura alors une collection de DealerContacts que vous pouvez sélectionner, filtrer et manipuler.

from contact in dealer.DealerContacts select contact

ou

context.Dealers.Select(d => d.DealerContacts)

Si vous n'utilisez pas les propriétés de navigation, vous manquez l'un des principaux avantages de LINQ-to-SQL : la partie qui mappe le graphique d'objet.

essentiellement LINQ rejoindre L'opérateur n'apporte aucun avantage à SQL.C'est à dire.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 INNER JOIN dans SQL

rejoindre est utile pour IEnumerable<> car il est plus efficace :

from contact in db.DealerContact  

la clause serait réexécutée pour chaque MarchandMais pour IQueryable<> ce n'est pas le cas.Aussi rejoindre est moins souple.

En fait, il est souvent préférable de ne pas adhérer, en linq bien sûr.Lorsqu'il existe des propriétés de navigation, une manière très succincte d'écrire votre instruction Linq est la suivante :

from dealer in db.Dealers
from contact in dealer.DealerContacts
select new { whatever you need from dealer or contact }

Cela se traduit par une clause Where :

SELECT <columns>
FROM Dealer, DealerContact
WHERE Dealer.DealerID = DealerContact.DealerID

Utiliser LINQ rejoint pour effectuer une jointure interne.

var employeeInfo = from emp in db.Employees
                   join dept in db.Departments
                   on emp.Eid equals dept.Eid 
                   select new
                   {
                    emp.Ename,
                    dept.Dname,
                    emp.Elocation
                   };

Essaye ça :

     var data =(from t1 in dataContext.Table1 join 
                 t2 in dataContext.Table2 on 
                 t1.field equals t2.field 
                 orderby t1.Id select t1).ToList(); 
var q=(from pd in dataContext.tblProducts join od in dataContext.tblOrders on pd.ProductID equals od.ProductID orderby od.OrderID select new { od.OrderID,
 pd.ProductID,
 pd.Name,
 pd.UnitPrice,
 od.Quantity,
 od.Price,
 }).ToList(); 
OperationDataContext odDataContext = new OperationDataContext();    
        var studentInfo = from student in odDataContext.STUDENTs
                          join course in odDataContext.COURSEs
                          on student.course_id equals course.course_id
                          select new { student.student_name, student.student_city, course.course_name, course.course_desc };

Où les tables des étudiants et des cours ont une relation de clé primaire et de clé étrangère

essaye plutôt ceci,

var dealer = from d in Dealer
             join dc in DealerContact on d.DealerID equals dc.DealerID
             select d;
var Data= (from dealer in Dealer join dealercontact in DealerContact on dealer.ID equals dealercontact.DealerID
select new{
dealer.Id,
dealercontact.ContactName

}).ToList();
var data=(from t in db.your tableName(t1) 
          join s in db.yourothertablename(t2) on t1.fieldname equals t2.feldname
          (where condtion)).tolist();
var list = (from u in db.Users join c in db.Customers on u.CustomerId equals c.CustomerId where u.Username == username
   select new {u.UserId, u.CustomerId, u.ClientId, u.RoleId, u.Username, u.Email, u.Password, u.Salt, u.Hint1, u.Hint2, u.Hint3, u.Locked, u.Active,c.ProfilePic}).First();

Écrivez les noms de table souhaités et initialisez la sélection pour obtenir le résultat des champs.

Jointure interne de deux tables dans Linq C#

var result = from q1 in table1
             join q2 in table2
             on q1.Customer_Id equals q2.Customer_Id
             select new { q1.Name, q1.Mobile, q2.Purchase, q2.Dates }

Un meilleur exemple

Noms des tables : TBL_Emp et TBL_Dep

var result = from emp in TBL_Emp join dep in TBL_Dep on emp.id=dep.id
select new
{
 emp.Name;
 emp.Address
 dep.Department_Name
}


foreach(char item in result)
 { // to do}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top