sintaxis sentencias left ejemplos consultas c# .net sql linq-to-sql join

left - sentencias linq c#



¿Cuál es la sintaxis de una unión interna en LINQ to SQL? (18)

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

¿Cómo representas lo siguiente en LINQ to SQL:

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


Crea una clave foránea y LINQ-to-SQL crea las propiedades de navegación para usted. Cada Dealer tendrá una colección de DealerContacts de DealerContacts que puede seleccionar, filtrar y manipular.

from contact in dealer.DealerContacts select contact

o

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

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


En realidad, a menudo es mejor no unirse, en linq es decir. Cuando hay propiedades de navegación, una forma muy breve 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


Para extender la answer sintaxis de la cadena de expresión por Clever Human:

Si quisiera hacer cosas (como filtrar o seleccionar) en los campos de ambas tablas que se unieron, en lugar de solo en una de esas dos tablas, podría crear un nuevo objeto en la expresión lambda del parámetro final al 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 los 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 creamos y que tiene los registros DealerContact y Dealer como sus propiedades.


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


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}


Unir dos mesas 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 }


Usar el operador de Linq Join :

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


Utilice las combinaciones LINQ 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 };


Va algo así 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 razonables para sus tablas para un mejor ejemplo. :)

Actualizar

Creo que para su 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 estás buscando los contactos, no los distribuidores.


Y porque prefiero la sintaxis de la cadena de expresión, aquí está cómo hacerlo con eso:

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


básicamente, el operador de unión LINQ 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;

resultará en INNER JOIN en SQL

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

from contact in db.DealerContact

La cláusula se volvería a ejecutar para todos los distribuidores. Pero para IQueryable <> no es el caso. También unirse es menos flexible.


prueba en lugar de esto,

var dealer = from d in Dealer join dc in DealerContact on d.DealerID equals dc.DealerID select d;


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 alumnos y cursos tienen clave primaria y relación de clave externa.


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 tabla que desee e inicialice la selección para obtener el resultado de los campos.


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


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