使用 linq 扩展方法选择 xml 中的元素

发布于 2024-09-13 19:18:15 字数 463 浏览 2 评论 0原文

我对 linq 不太熟悉,想知道如何使用扩展方法(不使用查询表达式)根据应用程序名称在以下 xml 中选择应用程序

<applicationlist>
<application>
    <name>test1</name>
    <ele1>852</ele1
    <ele2>http://localhost/test1</ele2>
</application>

<application>
    <name>test2</name>
    <ele1>456</ele1
    <ele2>http://localhost/test2</ele2>
</application>
</applicationlist>

I am little new to linq and was wondering how i can select the application in the following xml based on the application name using Extension Methods (not using the query expression)

<applicationlist>
<application>
    <name>test1</name>
    <ele1>852</ele1
    <ele2>http://localhost/test1</ele2>
</application>

<application>
    <name>test2</name>
    <ele1>456</ele1
    <ele2>http://localhost/test2</ele2>
</application>
</applicationlist>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

删除→记忆 2024-09-20 19:18:15

假设“选择的 SQL 方式”是指“使用查询表达式”,让我们从查询表达式开始:

var v = from b in root.Descendants("application")
      where b.Element("name").Value.Trim().ToLower() == appName.Trim().ToLower()
      select b;

使用扩展方法,这只是:

var v = root.Descendants("application")
            .Where(b => b.Element("name").Value.Trim().ToLower() ==
                        appName.Trim().ToLower());

我建议不要以这种方式进行不区分大小写的比较 - 它有文化问题。请使用类似这样的内容:(

var v = root.Descendants("application")
            .Where(b => b.Element("name").Value.Trim().Equals(appName.Trim(),
                                     StringComparison.CurrentCultureIgnoreCase);

或其他 StringComparison 选项之一 - 或 StringComparer 的实例)。

您可能还想修剪 appName 一次,而不是每次比较都修剪...

Assuming that by "the SQL way of selecting" you mean "using a query expression", let's start off with your query expression:

var v = from b in root.Descendants("application")
      where b.Element("name").Value.Trim().ToLower() == appName.Trim().ToLower()
      select b;

With extension methods, this would just be:

var v = root.Descendants("application")
            .Where(b => b.Element("name").Value.Trim().ToLower() ==
                        appName.Trim().ToLower());

I would recommend against making case-insensitive comparisons this way though - it has cultural problems. Use something like this instead:

var v = root.Descendants("application")
            .Where(b => b.Element("name").Value.Trim().Equals(appName.Trim(),
                                     StringComparison.CurrentCultureIgnoreCase);

(or one of the other StringComparison options - or an instance of StringComparer).

You might also want to trim appName once rather than for every comparison...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文