c# - Left join Lists with Linq and detect multiple matches -


my goal compare lists , update values on list values list b. along that, want work left join , keep values list if didn't updated , detect multiple matches.

what have tried far below.

the setup

public class person {     public string firstname { get; set; }     public string lastname { get; set; }     public string updateme { get; set; }      public static list<person> createlist()     {         return new list<person>         {             new person { lastname = "barton", firstname = "clint" },             new person { lastname = "stark", firstname = "tony" },             new person { lastname = "parker", firstname = "peter" }            };     }      public static list<person> createlisttwo()     {         return new list<person>         {             new person { lastname = "barton", firstname = "clint", updateme = "updated"},             new person { lastname = "stark", firstname = "tony", updateme = "updated"},         };     } }  public class firstlastnamematch : iequalitycomparer<person> {     public bool equals(person x, person y)     {         return x.firstname == y.firstname              && x.lastname == y.lastname;     }      public int gethashcode(person obj)     {         unchecked         {             var hash = 17;             hash = hash * 23 + obj.firstname.gethashcode();             hash = hash * 23 + obj.lastname.gethashcode();             return hash;         }     } } 

implementation

static void main() {     var lista = person.createlist();     var listb = person.createlisttwo();      //attempt     var result = lista.join(         listb,         x => x,         y => y,         (x, y) => new person         {             firstname = x.firstname,             lastname = x.lastname,             updateme = y.updateme         },         new firstlastnamematch()         );      foreach (var person in result)     {         console.writeline($"name: {person.firstname} {person.lastname} " +                           $"updateme: {person.updateme} ");     } } 

there problem run here is inner join , not left join. have found way left join cannot figure out how pass in iequalitycomparer syntax.

var result = persona in lista              join personb in listb on new {persona.firstname, persona.lastname } equals new { personb.firstname, personb.lastname }                  buffer              subperson in buffer.defaultifempty()              select new person              {                  firstname = persona.firstname,                  lastname = persona.lastname,                  updateme = (subperson == null ? string.empty : subperson.updateme)              }; 

the real catch once able complete left join while injecting comparison criteria, still need detect duplicates. need able identify if person lista matches more 1 person in listb. alright if lista had duplicates though.

end goal

left join 2 lists dynamic matching criteria.
detect multiple matches right list.
need update static list of properties on left list match right list.


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

css - Make div keyboard-scrollable in jQuery Mobile? -

android - Keyboard hides my half of edit-text and button below it even in scroll view -