Bonjour, quelqu'un peut-il m'aider s'il vous plaît, j'ai une liste qui contient mes codes de promotion et dans la liste je voudrais retourner uniquement les codes de promotion qui apparaissent une fois, c'est-à-dire qui n'ont pas de doublons, veuillez voir ci-dessous les données de JSON, je voudrais renvoyer le code de promotion A123 et B500 et enregistrez-les dans une autre liste.
var appearOnce = existingProms.Count(x => existingBnplIndicators.Contains(x.PromCode)).ToList()<2; var appearOnce = existingProms.where(x=> x.PromCode.Count()).ToList()<2;
J'ai une liste qui contient tout ce code de promotion comme indiqué ci-dessous
var existingProms = await _Repo.GetAllPromCodes(promCodeList);
j'ai essayé d'en obtenir ceux qui apparaissent une fois dans la liste comme ceci
[ { "PromCode": "A123", "Priority": 1, "offer": "Win a Free Cap", "StartDte": "2020-08-11T00:16:23.184Z", "endDte": "2020-09-10T17:16:23.184Z", }, { "PromCode": "A100", "Priority": 1, "offer": "Win a perfume", "StartDte": "2020-08-11T00:16:23.184Z", "endDte": "2020-09-10T17:16:23.184Z", }, { "PromCode": "A100", "Priority": 2, "offer": "Win a Phone pouch", "StartDte": "2020-09-11T00:16:23.184Z", "endDte": "2020-10-10T17:16:23.184Z", }, { "PromCode": "B500", "Priority": 1, "offer": "Win a free router", "StartDte": "2020-08-11T00:16:23.184Z", "endDte": "2020-09-10T17:16:23.184Z", }, ]
Mais cela n'a pas fonctionné, il y a 0 résultats retournés, quelqu'un pourrait-il montrer comment obtenir mes deux Proms A123, B500 dans ma liste d'apparition.Merci
3 Réponses :
Vous pouvez utiliser GroupBy
pour obtenir tous les résultats regroupés par PromoCode. Ensuite, filtrez les résultats en fonction du nombre d'éléments que chaque groupe doit afficher uniquement lorsque Count() == 1
.
Quelque chose comme ça peut-être,
public class Class1 { public string PromCode { get; set; } public int Priority { get; set; } public string offer { get; set; } public DateTime StartDte { get; set; } public DateTime endDte { get; set; } } var obj = JsonConvert.DeserializeObject<List<Class1>>(json); var singlesOnly = obj.GroupBy(x => x.PromCode).Where(y => y.Count() == 1);
@Jawas Merci d'avoir travaillé, juste besoin d'ajouter var singlesOnly = obj.GroupBy (x => x.PromCode) .Where (y => y.Count () == 1). Sélectionnez (x => x.Key.ToString ()). ToList (); pour qu'il renvoie le singlessOnly sous forme de liste de chaînes
Vous ne devez comparer les objets souhaités que par promcode implicitement. Regardez comment fonctionne Equals et GetHashCode ().
using System; using System.Collections.Generic; using System.Linq; namespace test { public class TestObj : IEquatable<TestObj> { public string Promocode { get; set; } public int Priority { get; set; } public string offer { get; set; } public DateTime StartDate { get; set; } public DateTime endDate { get; set; } public override int GetHashCode() => this.Promocode.GetHashCode(); public bool Equals(TestObj other) => Promocode.Equals(other.Promocode); } class Program { static void Main(string[] args) { var a = new TestObj() { Promocode = "1", Priority = 1, offer = "1", StartDate = new DateTime(1, 2, 3), endDate = new DateTime(1, 2, 3) }; var b = new TestObj() { Promocode = "1", Priority = 1, offer = "1", StartDate = new DateTime(1, 2, 3), endDate = new DateTime(1, 2, 3) }; var c = new TestObj() { Promocode = "2", Priority = 1, offer = "1", StartDate = new DateTime(1, 2, 3), endDate = new DateTime(1, 2, 3) }; var list = new List<TestObj>() { a, b, c }; var uniqueOnly = list.Distinct(); foreach (var item in uniqueOnly) { Console.WriteLine(item.Promocode); } } } }
Définissez d'abord les éléments de classe
static void Main(string[] args) { List<TestClass> list = new List<TestClass>() { new TestClass(){PromCode="A123",Priority=1,offer="Win a Free Cap",StartDte=new DateTime(2020-08-11),endDte=new DateTime(2020-09-10)}, new TestClass(){PromCode="A100",Priority=1,offer="Win a perfume",StartDte=new DateTime(2020-08-11),endDte=new DateTime(2020-09- 10)}, new TestClass(){PromCode="A100",Priority=2,offer="Win a Phone pouch",StartDte=new DateTime(2020-09-11),endDte=new DateTime(2020-10-10)}, new TestClass(){PromCode="B500",Priority=1,offer="Win a free router",StartDte=new DateTime(2020-08-11),endDte=new DateTime(2020-09-10)} }; var finalList = list.Select(b => b.PromCode).Distinct().ToList(); foreach(var item in finalList) { Console.WriteLine(item + ""); } Console.Read(); } }
Ensuite, prenez plusieurs éléments dans la liste et utilisez la fonction distinct () pour supprimer les valeurs en double-
public string PromCode { get; set; } public int Priority { get; set; } public string offer { get; set; } public DateTime StartDte { get; set; } public DateTime endDte { get; set; }