首页 \ 问答 \ linq到xml遍历结果(linq to xml iterate through results)

linq到xml遍历结果(linq to xml iterate through results)

我是新手使用linq特别是linq到xml,我很难尝试迭代结果。 我的xml文档有多个同名的节点嵌套在单个父节点中,我使用了以下linq查询,它返回正确的结果集。

var listingAgentElements = from p in _xElement.Descendants("commercial") select p.Elements("listingAgent");

我的xml具有以下格式:

<commercial>
    <listingAgent id="1">
    <listingAgent id="2">
    <listingAgent id="3">
 </commercial>       

我得到一个包含所有列表代理的结果集,虽然由于某种原因,当我尝试对listingAgentElements执行以下foreach循环时,我尝试循环的每个元素似乎具有完全相同的结果集,仍然具有所有三个listingAgents:

foreach (var element in listingAgentElements)
{
    var test = element;
}

每个listingAgent都有一组子元素,我想循环并获取存储在数据库中的值,因为我正在做一个xml导入控制台应用程序。

看来他们可能是查询的问题,但我真的不确定,有人可以帮忙吗?


I'm new to using linq in particular linq to xml and am having trouble trying to iterate through the results. My xml document has multiple nodes of the same name nested in a single parent node and I have used the following linq query which returns the correct result set.

var listingAgentElements = from p in _xElement.Descendants("commercial") select p.Elements("listingAgent");

My xml has the following format:

<commercial>
    <listingAgent id="1">
    <listingAgent id="2">
    <listingAgent id="3">
 </commercial>       

I am getting a result set containing all of the listing agents although for some reason when I try do the following foreach loop over listingAgentElements each element I try to loop over seems to have exactly the same result set as in still has all three listingAgents:

foreach (var element in listingAgentElements)
{
    var test = element;
}

Each listingAgent has a set of child elements in which I would like to loop over and get the values of to store in a DB as I'm doing an xml import console app.

It appears that their may be a problem with the query but I'm really not sure, could someone please assist?


原文:https://stackoverflow.com/questions/19087778
更新时间:2023-11-19 15:11

最满意答案

假设您在图表中添加了标签(现在让我们使用:Node,虽然从描述中不清楚所有节点是否应该相同,或者某些节点应该使用不同的标签),并且您有一个唯一的约束:Node(uuid) )为了快速查找,这应该工作:

MATCH (n:Node)-[:OWNER]->(o:Node)
WHERE o.uuid IN $owner_ids
WITH n, count(o) as cnt
WHERE cnt = size((n)-[:OWNER]->())
RETURN n

您的查询在no之间有一个笛卡尔积(图中所有节点的交叉积相互之间), 效果不佳 。 您需要在MATCH中指定关系,而不是WHERE。

至于查询的其余部分,我们为每个n获取o节点的数量(具有所讨论的ID的节点),并确保每个n的数量:OWNER关系等于该计数。 如果它更大,则存在:与其他节点的OWNER关系,因此将其过滤掉。

我们正在使用的size()函数,因为我们没有为结束节点指定任何东西,因此可以有效地获得关系计数


Assuming you add labels to your graph (let's use :Node for now, though it's not clear from your description if all nodes should be the same or if some should use different labels), and that you have a unique constraint on :Node(uuid) for quick lookup, this should work:

MATCH (n:Node)-[:OWNER]->(o:Node)
WHERE o.uuid IN $owner_ids
WITH n, count(o) as cnt
WHERE cnt = size((n)-[:OWNER]->())
RETURN n

Your query had a cartesian product between n and o (the cross product of all the nodes of your graph with each other), which won't perform well. You need to specify the relationship in the MATCH, not the WHERE.

As for the rest of the query, we're getting, for each n, the count of o nodes (those with the ids in question), and ensuring that the number of :OWNER relationships for each n is equal to that count. If it's greater, then there are :OWNER relationships to other nodes, so those are filtered out.

The size() function we're using, since we aren't specifying anything for the end node, is efficient at getting relationship counts.

相关问答

更多

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)