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

如何在Xamarin中结合Distinct、Sum与Count通过SQL查询填充CollectionView

解决Xamarin SQLite中同时实现分组去重与求和并绑定CollectionView的问题

你的核心问题在于SQL语句的写法——直接用DISTINCT和SUM组合无法正确实现“按商品名称去重并求和”的需求,因为DISTINCT是对整行数据去重,而不是按单个字段分组聚合。正确的做法是使用GROUP BY来按商品名称分组,再配合SUM计算每组的总销量,同时还要确保查询结果的列名和你的绑定属性匹配。

修正后的完整实现步骤

1. 修正SQL查询语句

把原来的DISTINCT替换为GROUP BY,并给求和的结果指定别名(和你的绑定属性soldAmount一致),同时推荐使用参数化查询避免日期格式问题和SQL注入风险:

using (SQLiteConnection conn = new SQLiteConnection(con.dBasePath))
{
    // 使用参数化查询,避免字符串拼接的格式与安全问题
    var query = @"SELECT soldProduct, SUM(soldAmount) AS soldAmount 
                  FROM PURCHASED_PRODUCTS 
                  WHERE salesDate BETWEEN ? AND ?
                  GROUP BY soldProduct";

    // 按数据库存储的日期格式生成参数(这里沿用你原有的格式)
    var startDate = btnDateFrom.Date.ToString("dd MMM yy");
    var endDate = btnDateTo.Date.ToString("dd MMM yy");

    SalesRecords.ItemsSource = conn.Query<DATA_BINDING.PURCHASED_PRODUCTS>(query, startDate, endDate);
}

2. 确认数据绑定类的属性匹配

确保你的DATA_BINDING.PURCHASED_PRODUCTS类中存在与查询列名完全匹配的属性(注意大小写一致):

public class PURCHASED_PRODUCTS
{
    public string soldProduct { get; set; }
    public decimal soldAmount { get; set; } // 可根据实际数据类型调整为int/double等
}

3. 保持XAML绑定不变

你原来的XAML绑定代码是正确的,无需修改:

<Label Text="{Binding soldProduct}" HorizontalOptions="Start" Margin="8,0,0,0" FontSize="14" FontAttributes="Bold" TextColor="White"></Label>
<Label Text="{Binding soldAmount}" TextColor="#2ABD8F" HorizontalOptions="CenterAndExpand" FontSize="22" HorizontalTextAlignment="Center" FontAttributes="Bold" VerticalOptions="CenterAndExpand" LineBreakMode="TailTruncation" Margin="0,-11,0,0"></Label>

为什么原来的写法不对?

  • DISTINCT([soldProduct])只会保证soldProduct列的值不重复,但如果不分组,SUM(soldAmount)会计算所有符合条件的记录的总和,而不是每个商品单独的总和。
  • 没有给SUM的结果指定别名时,查询返回的列名会是SUM(soldAmount),而你的绑定属性是soldAmount,导致数据无法正确绑定到UI。

额外注意事项

  • 日期格式:如果你的salesDate字段存储的是SQLite标准日期格式(如yyyy-MM-dd),建议改用ToString("yyyy-MM-dd")生成参数,避免因区域设置导致的日期解析错误。
  • 参数化查询:永远不要用字符串拼接构造SQL语句,这不仅会引发格式问题,还存在SQL注入的安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:12:45