【问题标题】:C# - EF SqlQuery and SQL Server "FOR XML PATH"C# - EF SqlQuery 和 SQL Server “FOR XML PATH”
【发布时间】:2016-05-12 06:23:11
【问题描述】:

我有这个 SQL 查询

Select Ident 
From Synchronization.ObjectsToResend
Where SyncTypeId = 36 
FOR XML PATH('')

返回

<Ident>8</Ident>
<Ident>9</Ident>
<Ident>10</Ident>
<Ident>11</Ident>
<Ident>12</Ident>
<Ident>13</Ident>
<Ident>14</Ident>
<Ident>16</Ident>
<Ident>17</Ident>

我认为这是一个单一的结果,我可以将它映射到 C# 中的单个字符串。

_context.Database.SqlQuery<string>($@"Select Ident From Synchronization.ObjectsToResend Where SyncTypeId = {id} FOR XML PATH('')");

不幸的是我得到了一个例外

序列包含多个结果

如果我在查询中添加“Top 1”,我只会得到一个 Ident,因此我可以遍历结果。这不是我想要的。

是否可以将我的 xml 作为一个元素返回?性能很重要。

【问题讨论】:

  • StringValue = string.Join( ",", ( your_select_that_returns_more_than_one_result ) ) //用空字符串或 environment.newline 替换逗号分隔符,以适合您所需的输出。
  • 您需要修复您的 sql 查询以返回一个值。或者你可以使用保罗的方式。
  • 难道不能在 mssql 中使用 for xml 以简单的方式做到这一点吗?

标签: c# sql-server xml entity-framework


【解决方案1】:

可能你必须添加一个根节点:

Select Ident From  
Synchronization.ObjectsToResend
Where SyncTypeId = 36 
FOR XML PATH(''),ROOT('root');

如果没有根节点,您的 XML 可以采用尽可能多的独立行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2017-12-06
    • 2021-11-15
    • 2012-12-16
    • 2015-09-21
    相关资源
    最近更新 更多