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

C# SQL: How to initiate code for each distinct value in SQL table column?

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

我有一个 SQL table,其中一列包含公司名称。 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

基本上,我想做的是将此 table 绑定到 ObservableCollection,然后为每个 distinct 公司创建一个 PDF。

所以,我认为我需要迭代列数据,并启动我的方法来创建 PDF foreach 不同的值。请在下面查看我的代码。

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) {

}

这里有一些洞。

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

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

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

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

  • 写一个自定义EqualityComparer and pass it as parameter to LINQ's .Distinct()
  • 使用 LINQ 的 .GroupBy() as described in the answer here 并使用 foreach 循环遍历已排序的列表。

获得所有独特物品后,您可以运行循环执行您的代码。