【发布时间】:2013-03-28 15:08:01
【问题描述】:
我在编写正确的代码或提出问题时可能是错误的,但我正在寻求以下帮助。
我有一个多对多关系的xml文件如下:
<ShowRoom>
<Cars>
<Car id="1" number="001" name="MyCar" >
<Parts>
<Part id="1" />
<Part id="2" />
</Parts>
</Car>
<Car id="2" number="002" name="YourCar" >
<Parts>
<Part id="2" />
<Part id="3" />
<Part id="4" />
</Parts>
</Car>
</Cars>
<Parts>
<Part id="1" name="Tyre" active="true"/>
<Part id="2" name="Window" active="true"/>
</Parts>
</ShowRoom>
对应那个对象是follow
public class Car
{
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
private string _number;
public string Number
{
get { return _number; }
set { _number = value; }
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private List<Parts> _listParts;
public List<Parts> ListParts
{
get { return _listParts; }
set { _listParts = value; }
}
}
我正在尝试的是读取 xml 并在汽车和零件之间加入,所以我会得到汽车对象及其所有零件的详细信息
IEnumerable<XElement> xCar = xdoc.Element("ShowRoom").Element("Cars").Elements("Car");
IEnumerable<XElement> xPart = xdoc.Element("ShowRoom").Element("Parts").Elements("Part");
IEnumerable<Car> car = xCar.Join(
xPart,
c => c.Element("Parts").Element("Part").Attribute("id").Value,
p => p.Attribute("id").Value,
(c, p) =>
new Cars
{
Id = int.Parse(c.Attribute("id").Value),
Number = (string)c.Attribute("number").Value,
Name = (string)c.Attribute("name").Value,
ListParts =
{
new Parts
{
Id = int.Parse(p.Attribute("id").Value),
Name = (string)p.Attribute("name").Value,
Active = bool.Parse(p.Attribute("active").Value)
}
}
});
这里的问题是我不知道如何像上面的代码那样让所有部件都与汽车相对,这显然是错误的
ListParts =
{
new Parts
{
Id = int.Parse(p.Attribute("id").Value),
Name = (string)p.Attribute("name").Value,
Active = bool.Parse(p.Attribute("active").Value)
}
那么如何使用上面相同的代码完成它,或者如果有其他好的方法,请与我分享。
谢谢。
【问题讨论】:
-
这里只是一点,为什么在创建允许调用者获取和设置这些属性的公共方法时设置私有属性,如果您的意图是允许调用者执行获取和设置。
-
@JonSkeet 道歉,如果我混淆了。
标签: c# xml linq join many-to-many