0

我有一个销售数据库,该数据库在 CountryCode 列中记录了商品销售地的 2 个字符国家代码。在销售数据库中,没有数量列,基本上每一行代表1次销售,以及与该次销售相关的信息。

我将能够展示最畅销的国家/地区。这是我提出的 linq 查询:

List<TopSellingCountries> tsc = (from sale in Sales
                                 where sale.CountryCode != null
                                 group sale by sale.CountryCode into cc
                                 select new TopSellingCountries
                                 {
                                     CountryCode = cc.Select(c => c.CountryCode).FirstOrDefault(),
                                     CountryCount = cc.Count()
                                 }).OrderByDescending(c => c.CountryCount).Take(10).ToList();

但是,当我将其输出到我的视图时,我会得到一个包含以下信息的表格:

CountryCode | CountryCount
         US | 196
         IE | 168
         US | 99
         GB | 91
         IE | 57
         AU | 32
         GB | 22
         AU | 18
         CA | 17
         CA | 17

如您所见,它似乎没有按国家代码正确分组。有谁知道我该如何克服这个问题?

编辑:如果有人需要,这是视图中的代码:

<table class="normal">
    <tr>
        <th>Country Code</th>
        <th>Country Count</th>
    </tr>
    <% foreach (var item in Model.TopSellingCountries)
       { %>
    <tr>
        <td><%: item.CountryCode %></td>
        <td><%: item.CountryCount %></td>
    </tr>
    <% } %>
    </table>
4

3 回答 3

1

确保修剪 CountryCode 中多余的空格

List<TopSellingCountries> tsc = (from sale in Sales
                                 where sale.CountryCode != null
                                 group sale by sale.CountryCode.Trim() into cc
                                 select new TopSellingCountries
                                 {
                                     CountryCode = cc.Key,
                                     CountryCount = cc.Count()
                                 })
                                 .OrderByDescending(c => c.CountryCount)
                                 .Take(10)
                                 .ToList();
于 2012-05-11T14:44:38.427 回答
1

利用

CountryCode = cc.Key,

代替

CountryCode = cc.Select(c => c.CountryCode).FirstOrDefault(),

还修剪 CountryCode 可以防止这样的问题:

所以:

group sale by sale.CountryCode.Trim() into cc
于 2012-05-11T14:26:17.350 回答
0

请尝试以下

List<TopSellingCountries> tsc = (from sale in Sales
                                 where sale.CountryCode != null
                                 group sale by sale.CountryCode into cc
                                 order by cc.Count() descending
                                 select new TopSellingCountries
                                 {
                                     CountryCode = cc.Key,
                                     CountryCount = cc.Count()
                                 }).Take(10).ToList();
于 2012-05-11T14:31:59.697 回答