c#linq to sql,包含动态sql的存储过程

时间:2010-09-02 14:13:00

标签: sql linq

我有一个包含动态sql的存储过程来返回结果集。查询运行正常,但我不能通过Linq使用它到sql。似乎数据类设计者认为查询只包含一列(位置)而不是正确的数字。

我猜它是因为动态sql意味着列在设计时不可用。查询是这样的:

set @query = 'select ' + char(13) +
  'case when a.location is not null then upper(left(a.location, 1)) + right(a.location, len(a.location) - 1) else ''All'' end as Location' + char(13) + @strsql +
  'group by ' + char(13) +
  'rollup(location)' + char(13)

其中@strsql是一个字符串,其中包含引用其余列的查询的其余部分。

有没有人知道克服这种限制的方法(除了当然不使用动态sql)?

由于

1 个答案:

答案 0 :(得分:4)

使用具有适当列数的非动态语句暂时替换存储过程中的sql。将它添加到DBML文件&保存(重新生成C#代码)。将原始SQL替换为存储过程。

除非你删除&将存储过程重新添加到DBML文件中,VisualStudio不应该再次查看存储过程本身。

/*
set @query = 'select ' + char(13) + 'case when a.location is not null then 
    upper(left(a.location, 1)) + right(a.location, len(a.location) - 1) 
    else ''All'' end as Location' + char(13) + @strsql + 'group by ' 
    + char(13) + 'rollup(location)' + char(13)  
 */
 select 'a' as Location, 'b' as othercol, 'c' as col3 

这当然假设strsql中的列数是固定的,具有一致的名称。如果没有,那么你正在达到C#的限制,而不是Linq。