2017-05-03 1 views
2

J'ai une classe avec peu de propriétés comme celle-ci.Vérification de la valeur distincte d'une propriété dans la liste sauf les valeurs nulles

public class CheckList 
{ 
    public int ACTION_ID { get; set; } 
    public string ACTION_NAME { get; set; } 
    public string ACTION_DESCRIPTION { get; set; } 
    public bool? ACTIVE { get; set; } 
} 

et Liste de cette classe dans mon contrôleur.

List<CheckList> validChecklists = _ChecklistRepo.GetAll(); 
var ifActionsAreSame = validChecklists .Select(t => t.ACTION_NAME).Distinct().Count(); 
if (ifActionsAreSame < validChecklists .Count) 
{ 
    return Ok(new {ActionsAreDuplicated= true }); 
} 

Parfois, l'ACTION_NAME de plusieurs éléments peut être null dans la liste. Ce code traite la valeur null comme doublon. Quelles modifications dois-je effectuer pour exclure les champs null dans le champ ACTION_NAME.

Répondre

5

Retirez ensuite les null s avec Where:

int notNullDistinctActionNames = validChecklists 
    .Where(t => t.ACTION_NAME != null) 
    .Select(t => t.ACTION_NAME) 
    .Distinct() 
    .Count(); 

Vous pouvez également utiliser la Count surcharge:

int notNullDistinctActionNames = validChecklists 
    .Select(t => t.ACTION_NAME) 
    .Distinct() 
    .Count(s => s != null); 
+0

a obtenu. Merci Tim –

1

Vous pouvez créer une liste séparée d'abord où sont supprimés tous les éléments avec une action null . Comparez ensuite le nombre de cette liste aux actions distinctes qui comptent dans cette liste. Mais cela nécessiterait deux étapes.

Une alternative serait d'utiliser un group by sur la liste initiale et vérifier si un groupe avec une valeur (une action non nulle) comporte plusieurs éléments:

bool AllActionsUnique = validChecklists.GroupBy(c=>c.ACTION_NAME).All(g=>g.Key==null || g.Count() == 1);