Sql 使用xml参数从LINQ调用存储过程
为了本实验的目的,我不想更改现有的存储过程。它当前通过一个非linq方法(如sqlcommand)调用,并接受一个xml参数 当前实施(非Linq) xml片段,例如:Sql 使用xml参数从LINQ调用存储过程,sql,xml,linq,stored-procedures,Sql,Xml,Linq,Stored Procedures,为了本实验的目的,我不想更改现有的存储过程。它当前通过一个非linq方法(如sqlcommand)调用,并接受一个xml参数 当前实施(非Linq) xml片段,例如: "<someTag>1</someTag><someTag>2</someTag>" “12” 作为字符串传递给存储过程。请注意,它没有包含根元素,如 <someTags>. 。 在这个实现中,存储过程愉快地接受这个xml片段作为字符串并工作 LINQ实施 如
"<someTag>1</someTag><someTag>2</someTag>"
“12”
作为字符串传递给存储过程。请注意,它没有包含根元素,如
<someTags>.
。
在这个实现中,存储过程愉快地接受这个xml片段作为字符串并工作
LINQ实施
如果我尝试从LINQ调用此存储过程,那么LINQ要求我必须使用Xelement。不幸的是,当前xml片段无法添加到Xelement,因为Xelement不能有多个根
如果添加根元素,存储过程将无法工作
我想要什么
我已经知道我可以在存储过程中更改xpath,使其在两种情况下都能工作。但我不想这么做
因此,在不手动修改生成的代码的情况下,是否可以让LINQ为此存储过程生成一个非Xelement的参数
或
有可能有一个具有多个根的Xelement吗(我对此表示怀疑,但嘿,值得一试)
谢谢为什么需要一个具有多个根的元素?您可以使用扩展方法从
IEnumerable
生成存储过程的字符串输入
如果可以从LINQ查询中获得IEnumerable输出,则可以执行以下操作
IEnumerable<XElement> someTags;
//someTags = your LINQ query here;
string aggregatedTags = someTags.Aggregate(string.Empty,
(accumulator, someTag) => string.Concat(accumulator, someTag));
IEnumerable someTags;
//someTags=您在此处的LINQ查询;
string aggregatedTags=someTags.Aggregate(string.Empty,
(acculator,someTag)=>string.Concat(acculator,someTag));
非常确定您在更改存储过程时遇到了困难,或者可能在更改生成的代码时遇到了困难。我能想到的唯一可能性是:
为什么用这么小的补丁来更改存储过程是一件大事(无论如何,为了清楚起见,应该做一个补丁)?很抱歉,延迟回复,生成的“LINQ to SQL”代码需要一个XElement,如果可能的话,我不想更改生成的代码。存储过程是一个已使用的存储过程,需要具有多个根的XML,以便其中的xpath工作。