Pregunta

Estoy escribiendo una instrucción LINQ to SQL y busco la sintaxis estándar para una unión interna normal con un ON cláusula en C#.

¿Cómo se representa lo siguiente en LINQ to SQL?

select DealerContact.*
from Dealer 
inner join DealerContact on Dealer.DealerID = DealerContact.DealerID
¿Fue útil?

Solución

Dice algo como:

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

Sería bueno tener nombres y campos sensatos para sus tablas para un mejor ejemplo.:)

Actualizar

Creo que para tu consulta esto podría ser más apropiado:

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

Ya que usted busca los contactos, no los distribuidores.

Otros consejos

Y como prefiero la sintaxis de cadena de expresión, así es como se hace con eso:

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

Para ampliar la sintaxis de la cadena de expresión respuesta por Humano inteligente:

Si desea hacer cosas (como filtrar o seleccionar) en los campos de ambas tablas que se unen (en lugar de solo una de esas dos tablas), puede crear un nuevo objeto en la expresión lambda del parámetro final del método Join. incorporando ambas tablas, por ejemplo:

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 parte interesante es la expresión lambda en la línea 4 de ese ejemplo:

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

...donde construimos un nuevo objeto de tipo anónimo que tiene como propiedades los registros DealerContact y Dealer, junto con todos sus campos.

Luego podemos usar campos de esos registros mientras filtramos y seleccionamos los resultados, como lo demuestra el resto del ejemplo, que usa dc_d como nombre para el objeto anónimo que construimos que tiene los registros DealerContact y Dealer como propiedades.

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

Usar Unirse a Linq operador:

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

Usted crea una clave externa y LINQ-to-SQL crea propiedades de navegación por usted.Cada Dealer entonces tendrá una colección de DealerContacts que puede seleccionar, filtrar y manipular.

from contact in dealer.DealerContacts select contact

o

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

Si no utiliza propiedades de navegación, se está perdiendo uno de los principales beneficios de LINQ-to-SQL: la parte que asigna el gráfico de objetos.

básicamente LINQ unirse El operador no proporciona ningún beneficio para SQL.Es decir.la siguiente consulta

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

dará como resultado INNER JOIN en SQL

unirse es útil para IEnumerable<> porque es más eficiente:

from contact in db.DealerContact  

cláusula se volvería a ejecutar por cada distribuidorPero para IQueryable<> no es el caso.También unirse es menos flexible.

En realidad, a menudo es mejor no unirse, es decir, en linq.Cuando hay propiedades de navegación, una forma muy sucinta de escribir su declaración linq es:

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

Se traduce en una cláusula donde:

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

Usar LINQ se une para realizar la unión interna.

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
                   };

Prueba esto :

     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 };

Donde las tablas de estudiantes y cursos tienen una relación de clave primaria y clave externa

prueba en su lugar esto,

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

Escriba los nombres de las tablas que desee e inicialice la selección para obtener el resultado de los campos.

Unión interna de dos tablas en 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 mejor ejemplo

Nombres de tablas: TBL_Emp y 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}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top