LEFT OUTER JOIN in LINQ

后端 未结 22 2453
臣服心动
臣服心动 2020-11-21 04:49

How to perform left outer join in C# LINQ to objects without using join-on-equals-into clauses? Is there any way to do that with where clause? Corr

22条回答
  •  一生所求
    2020-11-21 05:32

    take look at this example

    class Person
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Phone { get; set; }
    }
    
    class Pet
    {
        public string Name { get; set; }
        public Person Owner { get; set; }
    }
    
    public static void LeftOuterJoinExample()
    {
        Person magnus = new Person {ID = 1, FirstName = "Magnus", LastName = "Hedlund"};
        Person terry = new Person {ID = 2, FirstName = "Terry", LastName = "Adams"};
        Person charlotte = new Person {ID = 3, FirstName = "Charlotte", LastName = "Weiss"};
        Person arlene = new Person {ID = 4, FirstName = "Arlene", LastName = "Huff"};
    
        Pet barley = new Pet {Name = "Barley", Owner = terry};
        Pet boots = new Pet {Name = "Boots", Owner = terry};
        Pet whiskers = new Pet {Name = "Whiskers", Owner = charlotte};
        Pet bluemoon = new Pet {Name = "Blue Moon", Owner = terry};
        Pet daisy = new Pet {Name = "Daisy", Owner = magnus};
    
        // Create two lists.
        List people = new List {magnus, terry, charlotte, arlene};
        List pets = new List {barley, boots, whiskers, bluemoon, daisy};
    
        var query = from person in people
            where person.ID == 4
            join pet in pets on person equals pet.Owner  into personpets
            from petOrNull in personpets.DefaultIfEmpty()
            select new { Person=person, Pet = petOrNull}; 
    
    
    
        foreach (var v in query )
        {
            Console.WriteLine("{0,-15}{1}", v.Person.FirstName + ":", (v.Pet == null ? "Does not Exist" : v.Pet.Name));
        }
    }
    
    // This code produces the following output:
    //
    // Magnus:        Daisy
    // Terry:         Barley
    // Terry:         Boots
    // Terry:         Blue Moon
    // Charlotte:     Whiskers
    // Arlene:
    

    now you are able to include elements from the left even if that element has no matches in the right, in our case we retrived Arlene even he has no matching in the right

    here is the reference

    How to: Perform Left Outer Joins (C# Programming Guide)

提交回复
热议问题