【问题标题】:GroupBy by a condition and create different anonymous model per group EF6按条件分组并为每个组创建不同的匿名模型 EF6
【发布时间】:2021-04-25 14:38:41
【问题描述】:

我正在使用 EF6 + SQL Server。

我想对我的一张表进行查询,并将结果按条件映射到 2 个组中。

在每个组中,结果应作为不同类型的模型获取。这里的想法是,在一种情况下我需要很多字段,但在另一种情况下不需要,当然,我更喜欢在 1 次访问数据库中获取所有数据。

我正在尝试做类似的事情:

IEnumerable<long> idsWithFullModel = new[] { 1, 2 };
  
var groups = context.MyTable
   .GroupBy(
      x => idsWithFullModel.Contains(x.id),
      x => idsWithFullModel.Contains(x.id) ? 
       new 
       {
          field1 = x.field1,
          feild2 = x.feild2,
       } : 
       new 
       {
          field1 = x.field1,
       });

当我尝试这样做时,我得到一个错误

无法将 lambda 表达式转换为类型“IEqualityComparer,因为它不是委托类型”编译器错误

是否可以运行这种查询?

我试图按照@kamaz08 的建议使用对象:

    IEnumerable<long> idsWithFullModel = new[] { 1l, 2l };
  
var groups = new List<(long id,int field1,int feild2 )>{(1l, 1,2), (3l,1,2)}
   .GroupBy(
      x => idsWithFullModel.Contains(x.id),
      x => idsWithFullModel.Contains(x.id) 
      ? (object) new 
       {
          field1 = x.field1,
          feild2 = x.feild2,
       } 
       : (object) new 
       {
          field1 = x.field1,
       } 
   
      );

但现在我收到下一个错误:

无法将类型“匿名类型”转换为类型“System.Object”。 LINQ to Entities 仅支持转换 EDM 基元或枚举类型。

【问题讨论】:

  • 由于我对 EF 和 Linq 了解不多 - 看看您的数据是什么样的示例以及您的预期结果会很有趣。

标签: c# .net group-by entity-framework-6 sql-server-2016


【解决方案1】:

您仍然可以映射到对象。

    IEnumerable<long> idsWithFullModel = new[] { 1l, 2l };
      
    var groups = new List<(long id,int field1,int feild2 )>{(1l, 1,2), (3l,1,2)}
       .GroupBy(
          x => idsWithFullModel.Contains(x.id),
          x => idsWithFullModel.Contains(x.id) 
          ? (object) new 
           {
              field1 = x.field1,
              feild2 = x.feild2,
           } 
           : (object) new 
           {
              field1 = x.field1,
           } 
       
          );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 2022-11-07
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    相关资源
    最近更新 更多