2016-08-05 18 views
0

Ich entwickle ein MVC-Projekt mit .net. Ich habe eine json wie diese und die sehr langenWie man in einer Liste iteriert, um Namen und Werte mit linq zu finden

{ 
    credit_id: "57214f73c3a3681e800005f4", 
    department: "Production", 
    id: 84493, 
    job: "Casting", 
    name: "Mickie McGowan", 
    profile_path: "/k7TjJBfINsg8vLQxJwos6XObAD6.jpg" 
}, 
{ 
    credit_id: "572294979251413eac0007e2", 
    department: "Art", 
    id: 7927, 
    job: "Art Direction", 
    name: "Ricky Nierva", 
    profile_path: null 
}, 
{ 
    credit_id: "572297cdc3a3682d240008f9", 
    department: "Visual Effects", 
    id: 7894, 
    job: "Visual Effects", 
    name: "Jean-Claude Kalache", 
    profile_path: null 
}, 

Ich, dass jason in einer Liste namens „directorsData.crew“ ich die Namen finden, die ihre Abteilungen „Führung“ und fügen Sie sie in einer Liste Direktoren . Wie kann ich das mit LINQ machen?

wie diese

var directorsData = (tmdbMovie)JsonConvert.DeserializeObject<tmdbMovie>(findDirectors); 

List<string> directors = new List<string>(); 
if (directorsData != null) 
{ 
    if (directorsData.crew.Count != 0) 
    { 
     foreach (var item in directorsData.crew) 
     { 
      var name = directorsData.crew. ===? 
      directors.Add(name); 
     } 
    } 
} 
+1

FYI, wenn Sie deserialisieren, die Sie nicht 'tmdbMovie' zurückgeworfen eingeben müssen, wie Sie die generische verwenden' DeserializeObject () ', die bereits diese Art gibt :) –

Antwort

3

Mit Linq Sie können alle Namen als Liste erhalten, welche Abteilung ist Directing

var nameList = directorsData.crew.Where(a =>a.department == "Directing") 
           .Select(a => a.name).ToList(); 

auch, können Sie Type-Casting in Deserialisierung

var directorsData = JsonConvert.DeserializeObject<tmdbMovie>(findDirectors); 
+0

so dass ich denke, ich brauchst du die foreach dann nicht? – hbc

+0

ja du brauchst keine foreach mehr – Mostafiz

+0

funktioniert total, danke – hbc

0

Dieses entfernen wird eine Sammlung von tmdbMovie Klassen, die die Departmen haben, zurückgeben t gleich "Regie".

var directingCollection = directorsData.crew.Where(x => x.Department.Equals("Directing")); 

Wenn Sie nur die Namen möchten, in einem String-Sammlung, können Sie Folgendes tun:

var nameCollection = directorsData.crew.Where(x => x.Department.Equals("Directing")) 
             .Select(x => x.Name).ToList(); 

Wenn Sie möchten, dass alle Namen durchlaufen, können Sie Folgendes tun:

nameCollection.ForEach(x => 
{ 
    //X will be the string value of the name 
    //Your code here 
}); 
+0

du bist fantastisch – hbc