Frage

So führen Sie einen CROSS JOIN mit LINQ to SQL?

War es hilfreich?

Lösung

Ein Quer Join ist einfach das kartesische Produkt aus zwei Sätzen. Es gibt keine expliziten Join-Operator für sie.

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

Andere Tipps

Das gleiche mit linq Erweiterungsmethoden:

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

Basierend auf Steves Antwort, wäre der einfachste Ausdruck folgt aus:

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

Ein Tuple ist ein guter Typ für cartesianischen Produkt:

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

Erweiterungsmethode:

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

Und verwenden wie:

vals1.CrossJoin(vals2)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top