gpt4 book ai didi

.net - Linq to XML 简单查询

转载 作者:行者123 更新时间:2023-12-04 13:45:08 27 4
gpt4 key购买 nike

我没有得到这个 Linq 的东西。我可以编写复杂的 SQL 查询并编写了一些 xpath。我正在尝试学习 Linq to XML,尽管我仔细研究了我可以谷歌搜索的每个简洁示例,但我的第一次尝试仍然无法通过。

给定 XML:

<Manufacturer ManufacturerName="Acme">
<Model ModelName="RobotOne">
<CommandText CommandName="MoveForward">MVFW</CommandText>
<CommandText CommandName="MoveBack">MVBK</CommandText>

查询输入是“Acme”、“RobotOne”、“MoveBack”,我要输出“MVBK”

不确定这是否是构造 XML 的最佳方式我将如何使用元素而不是属性来做到这一点?有一些制造商和型号以及很多代码

最佳答案

如果您在整个 LINQ to XML 方面遇到困难,我建议您稍微退后一步,只看一下 linq。我相信 linq 非常值得努力 并且会返回你很多倍——特别是当我们迁移到多核世界时。

我建议您暂时忘记 XML 部分,只考虑 linq 正在做什么——在您了解 linq 是什么之后,它将使 XML 的专门内容更容易理解。考虑到这两件事,它可以帮助我考虑 linq:


  • 它在实现接口(interface) IEnumerable 的任何东西上表达标准的“运算符”(扩展方法)。换句话说,linq 只是一个方法调用。有些方法采用代码 (Func),有些方法 (First()) 没有。

  • 这使您不必担心这些运算符如何为您提供结果,而更多地只是声明您的意图。

  • 我们命令式语言的人很难放弃 的分钟(过度)规范。如何得到一个结果。 linq 基本上给我们的是一种方法 声明 我们想要一个结果,但没有确切说明如何获得它。这就是为什么,IMO,linq 学习如此重要,因为正是这种将意图与确切的“如何”完全“分离”才是 linq 真正酷的部分。基本上,它将函数式语言概念移植到糟糕的旧命令式 C# 中。

    一个有用的 LINQ 学习辅助工具是编写可以做同样事情的 C# 命令式代码 .这样做几次,突然间你会 看模式那 linq 为你做的。因此,例如,考虑一个“linq-to-object”声明。
    string[] names= new string[] { "kevin", "tristan", jen" };
    var result = names.where(n => n.length() > 3);

    C# 中用于 linq 查询的模拟是:
    List<string> list = new List<string>();
    foreach(string n in names)
    {
    if (n.length > 3) list.add(n);
    }

    我认为在这个例子中很容易看出 linq 是如何与 foreach 做同样的事情(实际上它在现实中非常接近这一点)——但你没有所有只是编译器粘性的绒毛。在 linq 版本中有更少的粘性和更多的意图。另一种说法是 linq 暗中为你做无聊的样板文件 让您的代码只显示有趣的部分。

    在功能方面, where() 方法是高阶函数 .这只是意味着它是一个本身接受或返回函数的函数。 Where() 采用 lambda——循环中有趣的部分 . lambda 是 C# 中的匿名函数——因此 Where() 接受一个函数,因此它是更高阶的。我之所以提到这一点,是因为这个概念非常强大,是理解 linq 的关键,它让我们深入了解 linq 实际上是如何嵌入到 C# 中的全新编程模型(函数式编程)。获得这种“高阶”对于理解 linq 非常有帮助。

    我认为,使用上述的直接 List 查询是了解 linq 工作原理的最佳方式。在您发现自己对严格的 L-2-O 查询感到满意之后,再看看 XML 的东西——我想您会发现它们会更有意义。

    随着 .NET 4.0 中即将推出的响应式(Reactive)框架,我们将看到 linq 不仅扩展到“拉”查询,还扩展到“推送”场景。即:集合将在更改时触发代码。我相信函数式编程的概念(其中 linq 是 C# 的 channel )是我们处理并发和并行问题最有可能的基本方法,因此学习它们非常重要——不仅仅是为了让我们的代码更简洁。

    关于.net - Linq to XML 简单查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2205088/

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