Linq Lambda groupby和投影问题

时间:2010-11-15 07:09:43

标签: linq lambda

如果我有一些数据: Model ModelName代码 阿里斯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();

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

任何提示赞赏

1 个答案:

答案 0 :(得分:2)

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

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();

您可能不需要在此处调用AsEnumerable - 您当然可以尝试删除它。