List<ListFiles> LocalFile = new List<ListFiles>(); LocalFile.Add(new ListFiles{ Name"1", Version new Version("1.1.1.1")}); LocalFile.Add(new ListFiles{ Name"2", Version new Version("1.1.1.1")}); LocalFile.Add(new ListFiles{ Name"3", Version new Version("1.1.1.1")}); LocalFile.Add(new ListFiles{ Name"4", Version new Version("1.1.1.1")}); List<ListFiles> UpdateFile = new List<ListFiles>(); UpdateFile.Add(new ListFiles { Name "1", Version new Version("2.1.1.1") }); UpdateFile.Add(new ListFiles { Name "2", Version new Version("2.1.1.1") }); UpdateFile.Add(new ListFiles { Name "3", Version new Version("2.1.1.1") }); UpdateFile.Add(new ListFiles { Name "5", Version new Version("2.1.1.1") }); var concatGroup LocalFile.Concat(UpdateFile).GroupBy(f> f.Name);//je concatene les deux liste et les group en fonciton du nom List<ListUpdateFiles> ListUpdate = (from fi in concatGroup let vu (fi.Count() 2 ? fi.ElementAtOrDefault(1).Version : new Version())//si il y a deux enregistrements dans le group, la version est transférée, sinon version par défaut select new ListUpdateFiles { Name = fi.Key,//la clé du group est le nom Version = fi.ElementAt(0).Version,//la version est celle du premier enregistrement du groupe UpdateVersion = vu//resulstat du test plus haut }).ToList<ListUpdateFiles>();
var concatGroup LocalFile.Select(fi> new {fi.Name,fi.Version, Origine = "Local" }).Concat(UpdateFile.Select(fi => new {fi.Name,fi.Version, Origine = "Update" })).GroupBy(f => f.Name);//je concatène les deux listes et les groupe en fonction du nom, ajout de la notion d'origine List<ListUpdateFiles> ListUpdate = (from fi in concatGroup let vu (fi.Count() 2 ? fi.ElementAt(1).Version : fi.ElementAt(0).Origine == "Update" ? fi.ElementAt(0).Version : new Version())//si il y a deux enregistrements dans le groupe, la version est transférée, sinon version la version n'est transférée qui si elle vient de update let v (fi.Count() 2 ? fi.ElementAt(0).Version : fi.ElementAt(0).Origine == "Local" ? fi.ElementAt(0).Version : new Version())//si il y a deux enregistrements dans le groupe, la version est transférée, sinon version la version n'est transférée qui si elle vient de local select new ListUpdateFiles { Name = fi.Key,//la clé du group est le nom Version = v,//résultat du test plus haut UpdateVersion = vu//résultat du test plus haut }).ToList<ListUpdateFiles>();
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionpublic class ListUpdateFiles { public string Name { get; set; } public Version LocalVersion { get; set; } public Version UpdateVersion { get; set; } }
List<ListFiles> LocalFile = new List<ListFiles>(); LocalFile.Add(new ListFiles{ Name"1", Version new Version("1.1.1.1")}); LocalFile.Add(new ListFiles{ Name"2", Version new Version("1.1.1.1")}); LocalFile.Add(new ListFiles{ Name"3", Version new Version("1.1.1.1")}); LocalFile.Add(new ListFiles{ Name"4", Version new Version("1.1.1.1")}); List<ListFiles> UpdateFile = new List<ListFiles>(); UpdateFile.Add(new ListFiles { Name "1", Version new Version("2.1.1.1") }); UpdateFile.Add(new ListFiles { Name "2", Version new Version("2.1.1.1") }); UpdateFile.Add(new ListFiles { Name "3", Version new Version("2.1.1.1") }); UpdateFile.Add(new ListFiles { Name "5", Version new Version("2.1.1.1") });