Pregunta

¿Cómo realizar una combinación CRUZADA con LINQ to SQL?

¿Fue útil?

Solución

Una combinación cruzada es simplemente el producto Cartesiano de dos conjuntos.No hay ninguna explícita operador de combinación para ella.

var combo = from p in people
            from c in cars
            select new
            {
                p.Name,
                c.Make,
                c.Model,
                c.Colour
            };

Otros consejos

Lo mismo con linq los métodos de extensión:

var names = new string[] { "Ana", "Raz", "John" };
var numbers = new int[] { 1, 2, 3 };
var newList=names.SelectMany(
    x => numbers,
    (y, z) => { return y + z + " test "; });
foreach (var item in newList)
{
    Console.WriteLine(item);
}

Basado en Steve respuesta, la expresión más simple sería este:

var combo = from Person in people
            from Car    in cars
            select new {Person, Car};

Un Tuple es un buen tipo de producto Cartesiano:

public static IEnumerable<Tuple<T1, T2>> CrossJoin<T1, T2>(IEnumerable<T1> sequence1, IEnumerable<T2> sequence2)
{
    return sequence1.SelectMany(t1 => sequence2.Select(t2 => Tuple.Create(t1, t2)));
}

Método De Extensión:

public static IEnumerable<Tuple<T1, T2>> CrossJoin<T1, T2>(this IEnumerable<T1> sequence1, IEnumerable<T2> sequence2)
{
    return sequence1.SelectMany(t1 => sequence2.Select(t2 => Tuple.Create(t1, t2)));
}

Y utilizar como:

vals1.CrossJoin(vals2)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top