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

C# WPF EF SQLite查询Item列去重值时类型转换错误求助

解决方法

你的问题核心是方法返回类型与实际返回值类型不匹配:GetBudgetsDistinct声明返回List<BudgetModel>,但Select(o => o.Item)提取的是string类型的Item字段,最终得到List<string>,自然无法隐式转换。以下是两种可行的解决思路:

方案1:直接返回去重的Item字符串列表(推荐,最简洁)

如果你的ItemList只需要展示Item的文本,直接修改方法返回类型为List<string>,同时调整调用代码的集合类型:

修改后的去重方法

public static List<string> GetBudgetsDistinct()
{
    using (var db = new DataContext())
    {
        return db.Budget
               .Select(o => o.Item)
               .Distinct()
               .ToList();
    }
}

调用代码调整

ItemList = new BindableCollection<string>(BudgetData.GetBudgetsDistinct());

方案2:返回包含唯一Item的BudgetModel实体列表

如果业务逻辑要求必须返回List<BudgetModel>(比如绑定控件需要完整实体对象),可以根据需求选择以下两种实现:

方式A:获取每个唯一Item对应的第一条完整记录

适合需要Item对应的其他属性数据的场景:

public static List<BudgetModel> GetBudgetsDistinct()
{
    using (var db = new DataContext())
    {
        return db.Budget
               .GroupBy(o => o.Item)
               .Select(group => group.First()) // 取每组的第一条记录
               .ToList();
    }
}

方式B:构造仅包含Item字段的BudgetModel对象

适合只需要Item字段,其他属性无需赋值的场景:

public static List<BudgetModel> GetBudgetsDistinct()
{
    using (var db = new DataContext())
    {
        return db.Budget
               .Select(o => o.Item)
               .Distinct()
               .Select(item => new BudgetModel { Item = item }) // 构造新实体,仅赋值Item
               .ToList();
    }
}

选择哪种方案取决于你的业务需求:如果只需要Item文本,方案1最高效;如果需要完整实体,根据是否需要其他属性选择方案2的A或B方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:03:11