【问题标题】:Unpivoting data using cross apply in LINQ to Entities在 LINQ to Entities 中使用交叉应用取消透视数据
【发布时间】:2022-01-12 19:11:29
【问题描述】:

我想在 Linq to Entities 中做这个查询,可以吗?

select v.account, v.value
from t cross apply
     (values (t.AccountID1, t.value),
             (t.AccountID2, - t.value)
     ) v(account, value) ;

此查询的作用是将作为列的 AccountID1 和 AccountID2 提取到行中,我也想在 LINQ to Entities 中执行此操作。

TL;DR:我正在尝试使用 LINQ to Entities 将列转换为行

【问题讨论】:

  • 简答:否。
  • 长答案:是的,但使用linq2db/linq2db.EntityFrameworkCore。如果您可以使用第三方扩展程序,我将展示示例。
  • 到目前为止你有什么?

标签: c# linq linq-to-entities


【解决方案1】:

你可以试试这样的

var results =
    from t in t
    from v in new[] {
        new {account = AccountID1, value = t.value},
        new {account = AccountID1, value = -t.value}
    }
    select v;

如果查询变得无法翻译,您可能需要将其全部拉回客户端并在此处取消透视,方法是将上述内容更改为 from t in t.ToList()

【讨论】:

  • 如果它变得无法翻译?当然可以(只是测试它!)。将整个表格拉入内存是个坏建议。
  • @GertArnold 取决于提供者,有些可以翻译。我无权访问 Linq-to-Entities,因此无法测试
  • 我认为没有任何供应商可以翻译这个。他们必须从 CLR 对象创建值元组。从未听说过这样做的 EF 提供商。如果您知道更多,请告诉。
猜你喜欢
  • 2017-01-26
  • 2021-07-05
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多