2017-10-21 4 views
-1

J'ai un viewmodel comme ceci:Création d'alias dans LINQ avec SelectMany

public class FileInfo 
{ 
    private string _fileNo; 
    private string _fileName; 

    public string FileNo 
    { 
     get 
     { 
      return _fileNo; 
     } 
     set 
     { 
      _fileNo = value; 
     } 
    } 

    public string FileName 
    { 
     get 
     { 
      return _fileName; 
     } 
     set 
     { 
      _fileName = value; 
     } 
    } 
} 

J'ai une liste DataList avec des données et FileNo peuvent avoir duplications.

Je peux utiliser LINQ ci-dessous pour obtenir toutes les données de Datalist avec condition comme ceci:

List<FileInfo> ViewList = DataList.Where(x => !string.IsNullOrWhiteSpace(x.FileName)) 
       .GroupBy(y => y.FileNo) 
       .SelectMany(z => z).ToList(); 

Comment obtenir le nom de I Alias ​​dans le SelectMany et aussi .ToList() pour la requête ci-dessus, il devrait ressembler à quelque chose comme ceci:

List<FileInfo> ViewList = DataList.Where(x => !string.IsNullOrWhiteSpace(x.FileName)) 
        .GroupBy(y => y.FileNo) 
        .SelectMany(new {...NewFileName = "Row " + FileNo + FileName, NewFileNo = "No " + FileNo}).ToList(); 

Les pointeurs seraient très appréciés

Merci

+0

Vous voulez projeter le résultat dans un nouveau type? Vous devriez en savoir plus sur les clases C#, vérifiez https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/classes –

+0

Vous devriez vraiment avoir consulté les docs pour SelectMany 'et les types anonymes comme vous auriez appris plus de faire cela que toute réponse ici vous donnera. – Enigmativity

Répondre

2

Essayez comme ci-dessous -

var ViewList = 
    DataList 
     .Where(x => string.IsNullOrWhiteSpace(x.FileName)) 
     .GroupBy(y => new { FileNo = y.FileNo }) 
     .SelectMany(x => 
      x.Select(y => new 
       { 
        NewFileName = "Row " + y.FileNo + y.FileName, 
        NewFileNo = "No " + y.FileNo 
       })) 
     .ToList(); 
+0

Comment puis-je le cast à la liste directement par cette requête aussi? pas une liste anonyme . Je vous remercie. – Karaiden

+0

make y => new FileInfo et changez NewFileName et NewFileNo en FileName et FileNo respectivement. –