You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chinook Database LINQ查询:Playlist主流派返回List类型错误修复

问题根因

  • 统计逻辑错误:你当前排序用的y.Genre.Tracks.Count是统计全库中该流派的总曲目数,而非当前播放列表内该流派的曲目数,得到的结果不是当前播放列表的占比最高流派。
  • 类型输出问题:Zanr属性是IEnumerable<string>集合类型,直接在ToString方法中插值输出时,默认会调用集合的基类ToString方法,只会输出集合的类型名称,不会输出集合内的元素值。

修复方案

场景1:仅需取单个占比最高的流派

  1. 修改DTO定义,将Zanr改为字符串类型
public class PlaylistaDTO
{
    public string Pesma { get; set; }
    public int brojPesama { get; set; }
    // 改为存储单个流派名称的字符串类型
    public string Zanr { get; set; }

    public override string ToString()
    {
        return $"播放列表: {Pesma}," +
               $"曲目总数: {brojPesama}," +
               $"主流派: {Zanr}";
    }
}
  1. 修改LINQ查询逻辑,按当前播放列表内的流派分组统计取最高
var playlist = _entities.Playlists.Select(x => new PlaylistaDTO
{
    Pesma = x.Name,
    brojPesama = x.Tracks.Count,
    Zanr = x.Tracks
            // 按当前播放列表内的曲目流派名称分组
            .GroupBy(t => t.Genre.Name)
            // 按分组内的曲目数量倒序排序
            .OrderByDescending(g => g.Count())
            // 取排序第一的流派名称,为空的话返回默认值
            .Select(g => g.Key)
            .FirstOrDefault() ?? "无流派"
}).ToList();

foreach (var p in playlist) {
    Console.WriteLine(p);
}

场景2:存在并列第一时需要输出所有主流派

  1. 保留Zanr为IEnumerable<string>类型,修改ToString方法拼接集合元素
public class PlaylistaDTO
{
    public string Pesma { get; set; }
    public int brojPesama { get; set; }
    public IEnumerable<string> Zanr { get; set; }

    public override string ToString()
    {
        return $"播放列表: {Pesma}," +
               $"曲目总数: {brojPesama}," +
               $"主流派: {string.Join("、", Zanr ?? Enumerable.Empty<string>())}";
    }
}
  1. 修改LINQ查询逻辑,取所有并列最高的流派
var playlist = _entities.Playlists.Select(x => new PlaylistaDTO
{
    Pesma = x.Name,
    brojPesama = x.Tracks.Count,
    Zanr = x.Tracks
            .GroupBy(t => t.Genre.Name)
            // 按相同的流派曲目数二次分组,取数量最高的一组
            .GroupBy(g => g.Count())
            .OrderByDescending(g => g.Key)
            .FirstOrDefault()?
            .Select(g => g.Key)
            .ToList() ?? new List<string>{"无流派"}
}).ToList();

foreach (var p in playlist) {
    Console.WriteLine(p);
}

内容的提问来源于stack exchange,提问作者Luka Vujovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:15:00