您好我已经为此工作了两天,我不知道为什么它不起作用。我有以下XML
Data = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XComment("UserData"),
new XElement("Users",
new XElement("user",
new XAttribute("name", "Bugs Bunny"),
new XAttribute("userID", "bbunny"),
new XAttribute("usertype", "Customer"),
new XElement("account",
new XAttribute("accounttype", "checking"),
new XAttribute("actbal", 1000),
new XAttribute("actbaldate", "1/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "1/1/2013"),
new XAttribute("tranAmount", 1000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 1000)))),
new XElement("user",
new XAttribute("name", "Tasmanian Devil"),
new XAttribute("userID", "tdevil"),
new XAttribute("usertype", "Customer"),
new XElement("account",
new XAttribute("accounttype", "checking"),
new XAttribute("actbal", -20),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "1/1/2013"),
new XAttribute("tranAmount", 1000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 1000)),
new XElement("trans",
new XAttribute("tranDate", "2/1/2012"),
new XAttribute("tranAmount", 900),
new XAttribute("trantype", "withdrawal"),
new XAttribute("tranBalance", 100)),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 120),
new XAttribute("trantype", "withdrawal"),
new XAttribute("tranBalance", -20)))),
new XElement("user",
new XAttribute("name", "Sam Sheepdog"),
new XAttribute("userID", "ssheepdog"),
new XAttribute("usertype", "Customer"),
new XElement("account",
new XAttribute("accounttype", "checking"),
new XAttribute("actbal", 1000),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "1/1/2013"),
new XAttribute("tranAmount", 1000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 1000)),
new XElement("trans",
new XAttribute("tranDate", "2/1/2012"),
new XAttribute("tranAmount", 500),
new XAttribute("trantype", "transfer"),
new XAttribute("tranBalance", 500)),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 500),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 1000))),
new XElement("account",
new XAttribute("accounttype", "savings"),
new XAttribute("actbal", 500),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 500),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 500)))),
new XElement("user",
new XAttribute("name", "Elmer J. Fudd"),
new XAttribute("userID", "efudd"),
new XAttribute("usertype", "Customer"),
new XElement("account",
new XAttribute("accounttype", "checking"),
new XAttribute("actbal", 100000),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "1/1/2013"),
new XAttribute("tranAmount", 100000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 100000)),
new XElement("trans",
new XAttribute("tranDate", "2/1/2012"),
new XAttribute("tranAmount", 50000),
new XAttribute("trantype", "transfer"),
new XAttribute("tranBalance", 50000)),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 50000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 100000))),
new XElement("account",
new XAttribute("accounttype", "moneymarket"),
new XAttribute("actbal", 50000),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 50000),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 50000)))),
new XElement("user",
new XAttribute("name", "Ralph Wolf"),
new XAttribute("userID", "rwolf"),
new XAttribute("usertype", "Customer"),
new XElement("account",
new XAttribute("accounttype", "checking"),
new XAttribute("actbal", 200),
new XAttribute("actbaldate", "4/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "1/1/2013"),
new XAttribute("tranAmount", 100),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 100)),
new XElement("trans",
new XAttribute("tranDate", "4/1/2012"),
new XAttribute("tranAmount", 100),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 100))),
new XElement("account",
new XAttribute("accounttype", "savings"),
new XAttribute("actbal", 1000),
new XAttribute("actbaldate", "4/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "3/1/2013"),
new XAttribute("tranAmount", 400),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 400)),
new XElement("trans",
new XAttribute("tranDate", "4/1/2012"),
new XAttribute("tranAmount", 600),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 1000))),
new XElement("account",
new XAttribute("accounttype", "moneymarket"),
new XAttribute("actbal", 500),
new XAttribute("actbaldate", "5/1/2013"),
new XElement("trans",
new XAttribute("tranDate", "5/1/2012"),
new XAttribute("tranAmount", 500),
new XAttribute("trantype", "deposit"),
new XAttribute("tranBalance", 500)))),
));
我不明白为什么这不会给我一个提供的userID == efudd和accounttype = checking的trans列表。当我打电话给foreach时,它会重新开始遍历这些项目,但之后就会停止并且没有找到任何内容。
IEnumerable<Transaction> userAcctInfo =
from item in Data.Descendants("user")
where (string)item.Attribute("usertype") == "Customer" &&
(string)item.Attribute("userID") == userID
from accts in item.Descendants("account")
where (string)accts.Attribute("accounttype") == account
from trans in item.Descendants("user").Descendants("account").Descendants("trans")
select new Transaction((DateTime)trans.Attribute("tranDate"),
(string)trans.Attribute("trantype"),
(decimal)trans.Attribute("tranAmount"),
(decimal)trans.Attribute("transBalance"));
我做错了什么?我在这里看了几个例子,我只是不明白 感谢
答案 0 :(得分:0)
Root
属性调用(或Element("Users")
)。Elements
而不是Descendants
。trans
开始查询item
而不是accts
,而var userAcctInfo =
from item in Data.Root.Elements("user")
where (string)item.Attribute("usertype") == "Customer" &&
(string)item.Attribute("userID") == userId
from accts in item.Elements("account")
where (string)accts.Attribute("accounttype") == account
from trans in accts.Elements("trans")
select new Transaction((DateTime)trans.Attribute("tranDate"),
(string)trans.Attribute("trantype"),
(decimal)trans.Attribute("tranAmount"),
(decimal)trans.Attribute("tranBalance"));
已在此处定义?那个工作并返回3个项目
{{1}}