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字段