2016-05-12 3 views
0

У меня есть этот запрос будетC# - EF SQLQuery и SQL Server "FOR XML PATH"

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>([email protected]"Select Ident From Synchronization.ObjectsToResend Where SyncTypeId = {id} FOR XML PATH('')"); 

К сожалению, я получаю исключение

последовательность содержит более одного результата

Если добавить «Top 1» на мой вопрос, я получаю только один Ident, так что я мог бы итерацию через результаты. Я этого не хочу.

Возможно ли вернуть мой xml в качестве одного элемента? Производительность важна.

+0

StringValue = string.join ("", (your_select_that_returns_more_than_one_result)) // замените разделитель запятой на пустую строку или среду.newline, в зависимости от того, что подходит вашему желаемому результату. – Paul

+0

Вам нужно исправить свой SQL-запрос, чтобы вернуть одно значение. или вы можете использовать путь Павла. – Saadi

+0

Невозможно сделать это простым способом в mssql, используя для xml? – adamo94

ответ

1

Может быть, вы должны добавить корневой узел:

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

без корневого узла вашего XML может быть принят как много независимы линий