我有以下XML:
<Vehicle>
<Car>
<Name>Audi</Name>
<ModelList>
<Model>A3</Model>
<Model>A5</Model>
<Model>A7</Model>
</ModelList>
</Car>
<Car>
<Name>Benz</Name>
<ModelList>
<Model>C Class</Model>
<Model>E Class</Model>
<Model>S Class</Model>
</ModelList>
</Car>
</Vehicle>
由此,我如何获得汽车名称“奥迪”的不同型号?
我尝试了以下内容:
var h = from c in load.Descendants("Vehicle")
select new { model = c.Descendants("Car").Elements("ModelList").ToArray() };
但这给了我“奥迪”和“奔驰”的所有型号。我在哪里可以通过这里的汽车名称?
答案 0 :(得分:3)
您只需要一个Where
子句或First
(或类似的东西)来执行过滤。
如果您知道只有一辆车的名称正确,您可以使用Single
:
var models = load.Descendants("Car")
.Single(x => (string) x.Element("Name") == "Audi")
.Element("ModelList")
.Elements("Model")
.Select(x => (string) x);
或者,如果您不知道是否可能有多个这样的元素(或者没有),并且您对所有名为奥迪的汽车的所有型号列表感到满意:
var models = load.Descendants("Car")
.Where(x => (string) x.Element("Name") == "Audi")
.SelectMany(x => x.Element("ModelList").Elements("Model"))
.Select(x => (string) x);
查询表达式中的后一版本:
var models = from x in load.Descendants("Car")
where (string) x.Element("Name") == "Audi"
from model in x.Element("ModelList").Elements("Model")
select (string) model;
答案 1 :(得分:1)
使用Linq to Sql:
XDocument doc = XDocument.Load("XMLFilePath");
var selectors3 = (from elements in doc.Element("Vehicle").Elements("Car")
where elements.Element("Name").Value == "Audi"
from items in elements.Element("ModelList").Elements("Model")
select items.Value).ToList();