代码之家  ›  专栏  ›  技术社区  ›  Samuel Goldenbaum

Linq-Lambda群与投影问题

  •  0
  • Samuel Goldenbaum  · 技术社区  · 15 年前

    如果我有如下数据: 模型模型名代码 阿里斯1.2 1 阿里斯1.3 2 花冠1.1 3 花冠1.4 4

    我想用一个新的投影创建一个groupby查询,如:

    var vehicles = _vehicleRepository.GroupBy(x=>new {x.Model,x.ModelName,x.Code})
                        .Select(g => new { Text = g.Key.Model + " - " + g.Key.ModelName, g.Key.Code })
                        .ToList();
    

    似乎我对文本=g.Key.Model+“-”+g.Key.ModelName有困难,它会导致SQL错误

    任何小费

    1 回复  |  直到 15 年前
        1
  •  2
  •   Jon Skeet    15 年前

    最简单的解决方法可能只是在客户端执行连接:

    var vehicles = _vehicleRepository.GroupBy(x => new {x.Model,x.ModelName,x.Code})
                    .Select(g => g.Key)
                    .AsEnumerable()
                    .Select(k => new { Text = k.Model + " - " + k.ModelName, 
                                       k.Code })
                    .ToList();
    

    这里是 AsEnumerable 有效地使查询的其余部分只在.NET中的调用站点上运行。我把一个额外的投影 只是 从每个组中获取密钥,这样就不需要传输更多的数据。

    另一种选择可能是 Distinct :

    var vehicles = _vehicleRepository.Select(x => new {x.Model,x.ModelName,x.Code})
                    .Distinct()
                    .AsEnumerable()
                    .Select(k => new { Text = k.Model + " - " + k.ModelName, 
                                       k.Code })
                    .ToList();
    

    可能你不需要打电话给 可数的 这里-你当然可以试着把它取下来。