0

我正在寻找数据库中具有重复电话号码的所有经销商。然后,我想将它们与所有经销商信息一起列在报告中。我无法让我的选择语句填充经销商记录属性。

如经销商名称地址等第四。我认为这是因为 group by 限制了它。

var dealers = _db.Dealers
            .Where(x => x.Active)
            .GroupBy(x => x.Phone)
            .Select(x => new { Dealer = x.Key, Phone = x.Count()})
            .Where(x => x.Phone > 1);

编辑:所需的输出将是每个经销商的列表。我希望具有相同电话号码的经销商彼此相邻出现。我不想要任何基于电话号码不重复的记录。

4

2 回答 2

0

只需将组中的第一项添加到最后一个 Select:

var dealers = _db.Dealers
                 .Where(x => x.Active)
                 .GroupBy(x => x.Phone)
                 .Select(x => new { Dealer = x.Key, Phone = x.Count(), FirstItem = x.First()})
                 .Where(x => x.Phone > 1);

结果将有一个FirstItem属性

或者,如果您想要一个平面列表中的所有项目,您可以将Where直接应用于分组:

var dealers = _db.Dealers
                 .Where(x => x.Active)
                 .GroupBy(x => x.Phone)
                 .Where(g => g.Count() > 1);
                 .SelectMany(g => g) // flat list of Dealers
于 2013-10-31T13:42:53.843 回答
0

您并没有确切地说出预期输出和实际输出是什么,所以我不知道您所说的“遇到麻烦”是什么意思。但我发现了一件可能令人困惑的事情:

您正在按电话 ( .GroupBy(x => x.Phone)) 分组。

因此,当您这样做时new { Dealer = x.Key, ...x.Key将参考该组的电话号码。

于 2013-10-31T13:48:29.340 回答