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) {
}
这里有一些洞。
我需要了解如何执行以下操作:
- 在哪里调用创建 PDF 的方法?我需要将上面的代码包装在另一个
foreach
中吗?
- 我是否还需要引用我的专栏名称
(= "CompanyName")
?怎么样?
- 如何确保只为每个不同的唯一值启动我的代码?
您可以尝试执行以下操作:
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 循环遍历已排序的列表。
获得所有独特物品后,您可以运行循环执行您的代码。
正在尝试在我的 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) {
}
这里有一些洞。
我需要了解如何执行以下操作:
- 在哪里调用创建 PDF 的方法?我需要将上面的代码包装在另一个
foreach
中吗? - 我是否还需要引用我的专栏名称
(= "CompanyName")
?怎么样? - 如何确保只为每个不同的唯一值启动我的代码?
您可以尝试执行以下操作:
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 循环遍历已排序的列表。
获得所有独特物品后,您可以运行循环执行您的代码。