LinQ XML содержит предложение where - PullRequest
0 голосов
/ 24 июля 2010
 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
                         };

Карты и BaseStation являются файлами XML. Я застрял в // где (geoSettings.Location.Contains (x.Element ("Location"). Value)) geoSettings - это IEnumerable. Как я могу получить "Location"?

Ответы [ 2 ]

0 голосов
/ 24 июля 2010

geoSettings - это IEnumerable.geoSettings.loc не .(Я предполагаю, что вы имеете в виду loc, а не Location, потому что ваш код не содержит последнего ...)

Чтобы вы могли лучше понять, что я имею в виду, обратите внимание, что geoSettings[n].loc допустимоно geoSettings.loc[n] - это не так.

Итак ... вам нужно будет использовать Any() вместо Contains(), как в «если что-либо в моей коллекции элементов geoSettings имеет подходящее местоположение»:

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
                  };

Примечание: если вы действительно выбираете только одно значение в geoSettings, вместо того, чтобы делать его коллекцией анонимных типов (с одним свойством loc), просто сделайтеэто коллекция строк и выберите только значение.Тогда вы можете использовать Contains() и сохранить целую кучу новых объектов.

0 голосов
/ 24 июля 2010

Вместо этого используйте объединение

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
                  };

Это даст вам только элементы из x, где есть соответствующий элемент в y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...