由于group by,LINQ TO SQL Limited select语句

时间:2013-10-31 13:41:14

标签: c# sql linq

我希望找到数据库中所有拥有重复电话号码的经销商。然后,我想在报告中列出所有经销商信息。我无法使用select语句来填充经销商记录属性。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

您正在通过电话进行分组(.GroupBy(x => x.Phone))。

因此当您new { Dealer = x.Key, ... x.Key时,{{1}}会引用该群组的电话号码。