0

我有一个存储过程。它为每个商店返回不同的列。

例如:(i) shop 有 5 个指标,那么它将返回与这 5 个相关的数据。

(ii) 如果商店有 10 个 - 它将返回 10 个。

结果来自 proc 中的动态 sql 查询返回。

我们如何在 linq to sql 中执行这个过程?Linq 期望事先在 .dbml 中定义列,并且在执行 proc 之前我不知道我的列。

有人可以建议是否可以在 linq to sql 中使用???

提前致谢...

4

1 回答 1

0

这有点取决于。

您知道列数是否有硬性上限?

如果是这样,那么您可以通过创建一个具有表示Column1...的属性的类来“粗暴”它,ColumnN其中构造函数将所有属性设置为 null,然后如果您希望这些结果自动映射,那么您可以使用DataContext.ExecuteQuery where T=that class你刚刚创建;

但是,只有在已知上限的情况下,这才真正起作用。否则,您不能使用 Linq2Sql 自动动态映射未知数量的列;请记住,当您在 Linq2Sql 中映射表或存储过程时,所发生的一切都是为您生成 .cs 文件中的类,该类具有在运行时不会更改的一组属性。

在这种情况下,如果您真的想使用对象,最好使用System.Data.DataTable或类似的方法和/或编写自己的 DataTable->Object 映射器。

要考虑的另一件事是,如果您控制检索这些结果的 SQL,是否可以旋转查询 - 返回多而不是列,接收类具有 2 个属性,一个用于“列”名称,另一个用于行价值; 这会很好用DataContext.ExecuteQuery

于 2013-10-03T21:12:00.430 回答