C# SQL:如何为 SQL 表列中的每个不同值启动代码?

Posted

技术标签:

【中文标题】C# SQL:如何为 SQL 表列中的每个不同值启动代码?【英文标题】:C# SQL: How to initiate code for each distinct value in SQL table column? 【发布时间】:2021-11-17 13:18:08 【问题描述】:

尝试在我的 SQL 数据库列中生成一张发票 foreach 不同的值。

我有一个 SQL 表,其中一列包含公司名称。 9 个不同的,总共 20 个。

为了避免混淆,这里是一个简短的例子:

ID CompanyName Value1 Value2 Value3
1 Company1 5 3 8
2 Company2 9 9 1
3 Company2 4 4 2
4 Company3 2 2 2
5 Company3 5 9 7
6 Company3 2 2 1

基本上,我要做的是将此表绑定到ObservableCollection,然后为每个不同公司创建一个PDF。

所以,我认为我需要遍历列数据,并启动我的方法来创建 PDF foreach distinct 值。请看我下面的代码。

try 

    using (SqlConnection con = new(//my connection string))
    using (SqlCommand cmd = new("spMyStoredProcedure", con)  CommandType = CommandType.StoredProcedure )
    using (SqlDataAdapter da = new(cmd))
    using (DataSet ds = new()) 

        con.Open();
        da.Fill(ds);

        foreach (DataRow dr in ds.Tables[0].Rows) 

            MyObservableCollection.Add(New MyClass 

                ID = (int)dr[0],
                CompanyName = dr[1].ToString(),
                Value1 = (decimal)dr[2],
                Value2 = (decimal)dr[3],
                Value3 = (decimal)dr[4],
            );
        

     catch (Exception ex) 


这里有一些漏洞。

我需要了解如何执行以下操作:

在哪里调用我的方法来创建 PDF?是否需要将上述代码包装在另一个 foreach 中? 是否还需要引用我的列名称(= "CompanyName")?怎么样? 如何确保仅针对每个不同的唯一值启动代码?

【问题讨论】:

请一次只回答一个问题 【参考方案1】:

您可以尝试执行以下操作:

foreach (var item in MyObservableCollection.Distinct(/*your custom equality comparer if you have one*/))
        
            //your pdf generating code here
        

要根据字段查找不同的记录,您有两种选择:

编写自定义EqualityComparer 并将其作为参数传递给LINQ 的.Distinct() 使用 LINQ 的 .GroupBy(),如答案 here 中所述,并使用 foreach 循环遍历已排序的列表。

获得所有唯一项后,您可以循环运行代码。

【讨论】:

以上是关于C# SQL:如何为 SQL 表列中的每个不同值启动代码?的主要内容,如果未能解决你的问题,请参考以下文章

SQL * Loader映射不同表列中的DataFile字段

如何在表列中访问 SQL 中的 varray 元素

SQL:如何为一列中具有重复值的每组行选择一行?

如何为不在第 2 列中的第 1 列选择 SQL

T-SQL基于分隔符拆分列并将拆分后的字符串数组输入到多个表列中

如何为'where'子句中的项目返回一些默认值,这些项目在数据库表列中不匹配(不存在)