2017-10-20 29 views
1

J'ai 2 variable utiliser comme condition à grouper par dans une liste de données string FileNo = ""; chaîne FileName = ""; Parce que FileNo et FileName peuvent être vides Donc quand j'ai une liste de données ressemble à ci-dessous: List DataList = new List();Comment puis-je utiliser ":" dans le groupe LINQ par les conditions

Je veux vous assurer FileNo et FileName pas vide alors je vais les utiliser dans le groupe par

Je ne sais pas comment les intégrer dans la syntaxe LINQ. Certains etc ressemble à ceci:

var TotalDuplicate = GridList.GroupBy(x,y => "".Equals(FileNo) : x.FileNo, 
              "".Equals(FileName) : y.FileName 
         .Count(x => x.Count() > 1); 
+0

Vous voulez exclure les éléments avec vide '' FileNo' et filename'? – DavidG

+0

pourquoi vous avez utilisé le groupe par? – arslanaybars

+4

Cherchez-vous * opérateur ternaire *? '" ".Equals (x.FichierNo)? "vide": x.FichierNo' –

Répondre

1

Essayez

List<string> x = new List<string>() { "", "pp", "jj", "kjj", "", "" }; 
foreach (string s in x.Select(xx => string.IsNullOrEmpty(xx) ? "Empty" : "Populated")) 
{ 
    Console.WriteLine(s); 
} 

Sortie:

vide Peuplé Peuplé Peuplé vide vide

Ce que j'ai fait dans l'instruction Select, vous pouvez le faire aussi dans les autres instructions linq (Où, Groupe etc)

3

Vous essayez de contourner un faux problème d'alias: au lieu de le grouper par un seule chaîne composée de deux parties, $"{FileNo}:{FileName}" groupe sur une paire de chaînes de la manière habituelle de LINQ:

var duplicates = GridList 
    .GroupBy(x => new { x.FileNo, x.FileName }) 
    .Count(g => g.Count() > 1);