【问题标题】:execute proc that returns varying columns in linq to sql执行将 linq 中的不同列返回到 sql 的 proc
【发布时间】:2013-10-04 05:12:00
【问题描述】:

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

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

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

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

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

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

提前谢谢...

【问题讨论】:

    标签: c#-4.0 linq-to-sql


    【解决方案1】:

    这取决于。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多