有一个现有的sproc,为了这个实验的目的,我不想改变。它目前通过非linq方法调用,如sqlcommand,并采用xml参数。
当前实施(非Linq)
xml片段,例如:
"<someTag>1</someTag><someTag>2</someTag>"
作为字符串传递给sproc。请注意,它没有包含根元素,如
<someTags>.
在这个实现中,sproc很乐意接受这个xml片段作为字符串并且工作
LINQ实施
如果我尝试从LINQ调用此sproc,则LINQ要求我必须使用Xelement。不幸的是,当前的xml片段无法添加到Xelement,因为Xelement不能有多个根。
如果我添加根元素,则sproc将无效。
我想要什么
我已经知道我可以更改sproc中的xpath以使其在两种情况下都能正常工作。我不想这样做
因此,如果没有手动修改生成的代码,LINQ是否可以为此sproc生成一个不是Xelement的参数?
OR
是否有可能拥有一个具有多个根的Xelement(我怀疑它,但是它值得一试)
由于
答案 0 :(得分:0)
为什么需要一个具有多个根的XElement?您可以使用Aggregate
扩展方法从IEnumerable<XElement>
生成存储过程的字符串输入。
如果您可以从LINQ查询中获取IEnumerable输出,则可以执行
IEnumerable<XElement> someTags;
//someTags = your LINQ query here;
string aggregatedTags = someTags.Aggregate(string.Empty,
(accumulator, someTag) => string.Concat(accumulator, someTag));
答案 1 :(得分:0)
非常确定您无法更改存储过程,或者可能更改生成的代码。我能想到的唯一可能性是:
为什么用这么小的修改来修改存储过程是一件大事(为了清楚起见应该做出修复)?