2016-08-07 13 views
-2

Wie kann ich dieses Problem lösen? Ich habe mit LINQ versucht, aber ich finde keinen Weg.Liste der Objekte, die eine andere Liste betrachten C#

Ich habe zwei Listen:

  1. Liste der Objekt-Datei (in System.IO)
  2. Liste des Zeichenfolge (in Art gebaut)

Die erste Liste enthält x Zahlen von File-Objekten. Die zweite Liste enthält x Zahlen der Zeichenfolge für Erweiterungen, ein Beispiel wäre {".txt",".exe"}. Ich brauche Dateiobjekte mit der Eigenschaft Erweiterung, die in der zweiten Liste vor anderen Dateiobjekten enthalten sind. Ein detaillierteste Beispiel wäre:

1) Liste hat diese Datei Objekte:

File {Name="1" Extension = ".exe"} 
File {Name="2" Extension = ".txt"} 
File {Name="3" Extension = ".ini"} 
File {Name="4" Extension = ".exe"} 
File {Name="5" Extension = ".zip"} 
File {Name="6" Extension = ".jpg"} 

2) Liste hat diese Werte: { ".txt", "exe"}

Die geordnete Liste wäre:

File {Name="1" Extension =".exe"} 
File {Name="2" Extension =".txt"} 
File {Name="4" Extension =".exe"} 
...Remaining 
File 
Objects, doesn't matter the position. 

LINQ, dass ich versucht habe:

var sorted = files.OrderBy(cus => precedenceExstensions.Contains(cus.Extension)); 
+2

Zeigen Sie, was Sie in LINQ versucht haben, damit wir Ihnen sagen können, wo Sie schief gelaufen sind. – FrankerZ

+1

Ihre Frage ist im Wesentlichen ein _Satz von Anforderungen_ und macht es daher zu breit. – MickyD

+0

var sortierte = files.OrderBy (cus => precedenceExstensions.Contains (cus.Extension)); Ich dachte daran, das Problem ohne LINQ zu lösen, weil es viel einfacher ist .. Aber ich werde einige temporäre Variablen erstellen müssen, die den Code kompliziert und viel anders als einfach LINQ machen – RandomOverflow

Antwort

0

Sie wollen nach absteigend bestellen:

files.OrderByDescending(f => extensions.Contains(f.Extension)); 

Linq wird die boolean false vor true bestellen, und Sie wollen, dass sie in der umgekehrten Reihenfolge.

Voll Code:

using System; 
using System.Collections.Generic; 
using System.Linq; 

public class File 
{ 
    public string Name; 
    public string Extension; 

    public override string ToString() 
    { 
     return string.Format("File: {0}, Extension: {1}", Name, Extension); 
    } 
} 


public class Program 
{ 
    public static void Main() 
    { 
     var files = new List<File>() 
     { 
      new File {Name="1", Extension = ".exe"}, 
      new File {Name="2", Extension = ".txt"}, 
      new File {Name="3", Extension = ".ini"}, 
      new File {Name="4", Extension = ".exe"}, 
      new File {Name="5", Extension = ".zip"}, 
      new File {Name="6", Extension = ".jpg"} 
     }; 

     var extensions = new[]{".txt", ".exe"}; 


     Console.WriteLine(string.Join("\n", files.OrderByDescending(f => extensions.Contains(f.Extension)))); 
    } 
} 

Sie können es auf dotnetfiddle here sehen.