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
相关产品推荐
相关产品推荐

