Esta es la forma general (como ya se proporcionó en otras respuestas)
var c =
from a in alpha
join b in beta on b.field1 equals a.field1 into b_temp
from b_value in b_temp.DefaultIfEmpty()
select new { Alpha = a, Beta = b_value };
Sin embargo, aquí hay una explicación que espero aclare lo que esto realmente significa.
join b in beta on b.field1 equals a.field1 into b_temp
esencialmente crea un conjunto de resultados separado b_temp que efectivamente incluye 'filas' nulas para entradas en el lado derecho (entradas en 'b').
Luego la siguiente línea:
from b_value in b_temp.DefaultIfEmpty()
..itera sobre ese conjunto de resultados, configurando el valor nulo predeterminado para la 'fila' en el lado derecho, y configurando el resultado de la unión de la fila del lado derecho al valor de 'b_value' (es decir, el valor que está a la derecha lado de la mano, si hay un registro coincidente, o 'nulo' si no lo hay).
Ahora, si el lado derecho es el resultado de una consulta LINQ separada, consistirá en tipos anónimos, que solo pueden ser 'algo' o 'nulo'. Sin embargo, si es enumerable (por ejemplo, una Lista, donde MyObjectB es una clase con 2 campos), entonces es posible ser específico acerca de qué valores 'nulos' predeterminados se usan para sus propiedades:
var c =
from a in alpha
join b in beta on b.field1 equals a.field1 into b_temp
from b_value in b_temp.DefaultIfEmpty( new MyObjectB { Field1 = String.Empty, Field2 = (DateTime?) null })
select new { Alpha = a, Beta_field1 = b_value.Field1, Beta_field2 = b_value.Field2 };
Esto garantiza que 'b' en sí mismo no sea nulo (pero sus propiedades pueden ser nulas, utilizando los valores nulos predeterminados que ha especificado), y esto le permite verificar las propiedades de b_value sin obtener una excepción de referencia nula para b_value. Tenga en cuenta que para un DateTime anulable, un tipo de (DateTime?), Es decir, 'DateTime anulable' debe especificarse como el 'Tipo' del nulo en la especificación de 'DefaultIfEmpty' (esto también se aplicará a los tipos que no son 'nativos' 'nulables, por ejemplo, doble, flotante).
Puede realizar múltiples combinaciones externas izquierdas simplemente encadenando la sintaxis anterior.