gpt4 book ai didi

c# - 通过 Linq XML 和 Linq 对象列表交叉连接

转载 作者:太空宇宙 更新时间:2023-11-03 15:11:31 26 4
gpt4 key购买 nike

我有一个包含该内容的 xml 文件:

<?xml version="1.0" encoding="utf-8" ?>
<packages>
<package productnumber="123">
<stpos>
<pid>345</pid>
<vat>10</vat>
</stpos>
<stpos>
<pid>678</pid>
<vat>20</vat>
</stpos>
</package>
<package productnumber="246">
<stpos>
<pid>81012</pid>
<vat>5</vat>
</stpos>
<stpos>
<pid>141618</pid>
<vat>2</vat>
</stpos>
</package>
</packages>

然后我还有一个产品列表:

var productList = new List<Product>
{
new Product {ProductNumber = "123" },
new Product {ProductNumber = "345" },
new Product {ProductNumber = "678" },
new Product {ProductNumber = "246" },
new Product {ProductNumber = "81012" },
new Product {ProductNumber = "Nothing" },
};

我想要检查每个包的产品编号及其 pid 在 productList 中是否存在。如果为真,则返回那些包。

在我上面的示例中:

我想退回产品编号为 123 的包裹,因为所有 3 个产品编号都存在于产品列表中。

productnumber 为 246 的包裹不应退回,因为产品列表中只有 2 个产品编号,没有包含“Nothing”...

这就是我的查询:

    var doc = XDocument.Load("./packages.xml");
var query = (from package in doc.Descendants("packages").Elements()
from p in productList
where p.ProductNumber == package.Attribute("productnumber").Value &&
productList.All(p =>
package.Descendants("stpos").Select(x => x.Element("pid").Value).Contains(p.ProductNumber))
select package).ToList();

我的 query.Count() 是 0,我不明白为什么。

谁能睁开我的眼睛:-)

最佳答案

我认为这就是您要实现的目标:

var doc = XDocument.Load("./packages.xml");
var numbers=productList.Select(p=>p.ProductNumber);
var query= doc.Descendants("package")
.Where(e=>numbers.Contains( (string)e.Attribute("productnumber")) &&
e.Descendants("stpos").All(p=>numbers.Contains((string)p.Element("pid"))) );

关于c# - 通过 Linq XML 和 Linq 对象列表交叉连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41026801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com