values not multiple linq join where-clause

multiple - not in linq c#



LINQ Join Where Clause (2)

Para unirse en un campo múltiple en LINQ, debe crear un nuevo tipo anónimo que contenga las columnas que desea comparar y luego usar ese tipo anónimo en la unión:

var results = from t1 in context.tb1 join t2 in context.tb2 on new { t1.Col1, t1.Col2, t1.Col3 } equals new { t2.Col1, t2.Col2, t2.Col3 } where t2.Col1 == col1 && t2.Col2 == col2 && t2.Col4 == someString select t1;

Y aquí está la sintaxis Lambda equivalente:

var results = context.tb1.Join( context.tb2, t1 => new { t1.Col1, t1.Col2, t1.Col3 }, t2 => new { t2.Col1, t2.Col2, t2.Col3 }, (t1, t2) => new { t1, t2 }) .Where(o => o.t2.Col1 == col1 && o.t2.Col2 == col2 && o.t2.Col4 == someString) .Select(o => o.t1);

Como puede ver, en el caso de las uniones, la sintaxis de la consulta generalmente produce una declaración más fácil de leer.

Estoy luchando con una cláusula join / where con lo que es una declaración select simple de sql.

Estoy tratando de recuperar una lista de información del producto de tb1 con la condición where detrás situada en tbl2, pero esto debe estar unido por tres columnas diferentes.

por lo que el SQL se vería algo así como:

SELECT tb1.* FROM tb2 INNER JOIN tb1 ON tb2.Col1 = tb1. Col1 AND tb2.Col2 = tb1. Col2 AND tb2.Col3 = tb1.Col3 WHERE (tb2.Col1 = col1) AND (tb2.Col2 = col2) AND (tb2.Col4 = string)

ColX es la cláusula where principal con la cadena a pasar como parámetro; todas las otras columnas están dentro de los contextos.

¿Cómo se implementan múltiples uniones con una cláusula where?

Y empuja en la dirección correcta, muy apreciada.


También puede incluir la cláusula WHERE en la sintaxis de lamda en la referencia a la tabla en la que se está uniendo.

var query = from pt in dc.ProjectTasks join ttab in dc.TimeTaskAssigns on pt.Id equals ttab.ProjectTaskId join ttb2 in dc.CMS_TAT_TIMEs.Where(a => a.WIP_STATUS == ''B'') on ttab.CmsTimeUno equals ttb2.TIME_UNO select pt;

Parece obvio ahora, ¿no? Me tomó mucho tiempo encontrar esa solución.