我有一个存储过程。它为每个商店返回不同的列。
例如:(i) shop 有 5 个指标,那么它将返回与这 5 个相关的数据。
(ii) 如果商店有 10 个 - 它将返回 10 个。
结果来自 proc 中的动态 sql 查询返回。
我们如何在 linq to sql 中执行这个过程?Linq 期望事先在 .dbml 中定义列,并且在执行 proc 之前我不知道我的列。
有人可以建议是否可以在 linq to sql 中使用???
提前致谢...
我有一个存储过程。它为每个商店返回不同的列。
例如:(i) shop 有 5 个指标,那么它将返回与这 5 个相关的数据。
(ii) 如果商店有 10 个 - 它将返回 10 个。
结果来自 proc 中的动态 sql 查询返回。
我们如何在 linq to sql 中执行这个过程?Linq 期望事先在 .dbml 中定义列,并且在执行 proc 之前我不知道我的列。
有人可以建议是否可以在 linq to sql 中使用???
提前致谢...
这有点取决于。
您知道列数是否有硬性上限?
如果是这样,那么您可以通过创建一个具有表示Column1
...的属性的类来“粗暴”它,ColumnN
其中构造函数将所有属性设置为 null,然后如果您希望这些结果自动映射,那么您可以使用DataContext.ExecuteQuery where T=that class你刚刚创建;
但是,只有在已知上限的情况下,这才真正起作用。否则,您不能使用 Linq2Sql 自动动态映射未知数量的列;请记住,当您在 Linq2Sql 中映射表或存储过程时,所发生的一切都是为您生成 .cs 文件中的类,该类具有在运行时不会更改的一组属性。
在这种情况下,如果您真的想使用对象,最好使用System.Data.DataTable
或类似的方法和/或编写自己的 DataTable->Object 映射器。
要考虑的另一件事是,如果您控制检索这些结果的 SQL,是否可以旋转查询 - 返回多行而不是列,接收类具有 2 个属性,一个用于“列”名称,另一个用于行价值; 这会很好用DataContext.ExecuteQuery