2010-07-24 7 views
0
var geoSettings = (from c in geoFields.Elements("Maps").Elements("Map") 
           select new 
           { 
            loc = c.Element("Location").Value 
           }).Distinct().Intersect(from p in terrainFields.Elements("Maps").Elements("Map") 
                 select new 
                 { 
                  loc = p.Element("Location").Value 
                 }); 

     var flightCheck = from x in baseStations.Elements("BaseStation").Elements("Station") 
         // where (geoSettings.Location.Contains(x.Element("Location").Value)) 
         select new 
         { 
          Flights = x.Element("FlightName").Value, 
          loc = x.Element("Location").Value 
         }; 

Les deux cartes et BaseStation sont xml files.I'm bloqués à // où (geoSettings.Location.Contains (x.Element ("Location"). Valeur)) geoSettings est un IEnumerable.Comment puis-je obtenir le "Emplacement"?XML LinQ contient dans la clause WHERE

Répondre

0

Utilisez une jointure au lieu

var flightCheck = from x in baseStations.Elements("BaseStation").Elements("Station") 
        join y in geoSettings.Location on x x.Element("Location").Value equals y.Value        
        select new 
        { 
         Flights = x.Element("FlightName").Value, 
         loc = x.Element("Location").Value 
        }; 

Cela vous donnera seulement des éléments de x où il y a un élément correspondant dans y.

+0

Cant accéder à geoSettings.Location de cette façon parce que geoSettings est de type IEnumerable – Webbies

+0

J'ai utilisé jointures et cela a fonctionné, merci pour l'idée, mais encore geoSettings.Location est incorrecte, donc je ne peux pas étiqueter votre réponse comme la bonne réponse. – Webbies

0

geoSettings est un IEnumerable. geoSettings.loc n'est pas. (Je suppose que vous voulez dire loc, pas Location, parce que votre code ne contient pas ce dernier ...)

vous pouvez donc mieux comprendre ce que je veux dire, note que geoSettings[n].loc est valide, mais geoSettings.loc[n] est pas.

Alors ... vous allez avoir besoin d'utiliser Any() au lieu de Contains(), comme dans "si quelque chose dans ma collection d'éléments de geoSettings a un emplacement correspondant":

var flightCheck = from x in baseStations.Elements("BaseStation").Elements("Station") 
        where geoSettings.Any(geo => geo.loc.Contains(x.Element("Location").Value) 
        select new 
        { 
         Flights = x.Element("FlightName").Value, 
         loc = x.Element("Location").Value 
        }; 

Side note : si vous ne sélectionnez qu'une seule valeur dans geoSettings, au lieu de créer une collection de types anonymes (avec une seule propriété loc), créez simplement une collection de chaînes et sélectionnez uniquement la valeur. Ensuite, vous pouvez utiliser Contains() et enregistrer faire un tas de nouveaux objets.