c# - 在过滤器 && 属性的 Linq 中使用变量
问题描述
嗨,我想过滤一个元素和一个属性,就像在 MS 示例中一样,但不是使用严格的字符串,而是我想使用一个变量(来自数组或列表的元素,如下例中的状态。这可能吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
namespace LinqFilterTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
XElement root = XElement.Load(@"C:\Users\john\Desktop\PurchaseOrdersInNamespace.xml");
XNamespace aw = "http://www.adventure-works.com";
string[] items = new string[3]
{
"NY" , "CA", "FL"
};
for (int i = 0; i < 3; i++)
{
var state = items[i];
IEnumerable<XElement> purchaseOrders =
from el in root.Elements(aw + "PurchaseOrder")
where
(from add in el.Elements(aw + "Address")
where
//(string)add.Attribute(aw + "Type") == "Shipping" &&
(string)add.Element(aw + "State") == state
select add)
.Any()
select el;
foreach (XElement el in purchaseOrders)
Console.WriteLine((string)el.Attribute(aw + "State"));
}
}
}
}
解决方案
编辑:适用于变量。
static void Main(string[] args)
{
XElement root = default;
string[] items = new string[3] { "NY", "CA", "FL" };
// Without Namespace
Console.WriteLine("Without namespace LINQ:\n");
root = XElement.Load("H:\\PurchaseOrders.xml");
foreach (var el in from state in items
let purchaseOrders = from el in root.Elements("PurchaseOrder")
where (from add in el.Elements("Address")
where (string)add.Attribute("Type") == "Shipping"
&& (string)add.Element("State") == state
select add).Any()
select el
from XElement el in purchaseOrders
select el)
{
Console.WriteLine((string)el.Attribute("PurchaseOrderNumber"));
}
// With Namespace
Console.WriteLine("\nWith namespace LINQ:\n");
root = XElement.Load("H:\\PurchaseOrdersInNamespace.xml");
XNamespace aw = "http://www.adventure-works.com";
foreach (var el in from state in items
let purchaseOrders = from el in root.Elements(aw + "PurchaseOrder")
where (from add in el.Elements(aw + "Address")
where (string)add.Attribute(aw + "Type") == "Shipping"
&& (string)add.Element(aw + "State") == state
select add).Any()
select el
from XElement el in purchaseOrders
select el)
{
Console.WriteLine((string)el.Attribute(aw + "PurchaseOrderNumber"));
}
Console.ReadKey();
}
推荐阅读
- python - 为什么 Gio.Settings 不影响
- regex - Powershell替换文本文件中多次出现的正则表达式
- html - 如何从 SVG img 中删除额外的高度
- python-3.x - Google Cloud Functions (GCF) - 使用 apt-get 安装包
- blockchain - Corda Azure 单一分类帐资源 - Web 服务器问题中没有 Cordapp
- javascript - 无法在请求中编辑变量
- bash - 如何安全地提前退出 bash 脚本?
- c - C编译器的区别?Char 中的 NUL 控制字符
- angular - ionic 4 - 如何检索传递给模态的数据
- python - 无法在 Python 中使用 Stem 和 Tor 更改我的 IP 地址?