C# foreach循环、Linq循环之后增加汇总行

本文介绍了如何在C#中使用Linq和foreach循环处理数据,并在循环后添加汇总行,分别展示了在DataGridView和数据操作中应用这两种方法。

1.DataGridView增加汇总行(Linq循环获取数据)

private void BMbyBindData()
        {
            DateTime time1 = DateTime.Parse(DateTime.Now.ToShortDateString() + " 23:59:59");
            DateTime time2 = DateTime.Parse(DateTime.Now.ToShortDateString() + " 00:00:00");

            var Datainfo = (from name in new ReportTwo().BuMenWeek(time1, time2).AsEnumerable()
                            select new SumColumnModel
                            {
                                rows =(name[0]).ToString(),
                                BusinessUnitIdName = name[1].ToString(),
                                SystemUserIdName = name[2].ToString(),
                                zhoujifen = Convert.ToInt32(name[3]),
                                zong = Convert.ToInt32(name[4]),
                            }).ToList();

            SumColumnModel zm = new SumColumnModel();//实例化类

            zm.rows = "";   //增加汇总行的序号
            zm.BusinessUnitIdName = "合计";
            int a = Datainfo.Select(x => x.zong).Sum();     //得到各小组回执总和
            double d = Convert.ToDouble(a) / 99999;
            zm.SystemUserIdName = string.Format("{0:0.00%}", d);   //得到完成率
            zm.zhoujifen = Datainfo.Select(x => x.zhoujifen).Sum();     //周积分总和
            zm.zong = Datainfo.Select(x => x.zong).Sum();           //各小组回执总和

            List<SumColumnModel> zmlist = new List<SumColumnModel>();
            Datainfo.Add(zm);

            CR.DataSource = Datainfo;
            CR.Height = CR.Rows.Count * CR.RowTemplate.Height + CR.ColumnHeadersHeight;

            CR.ReadOnly = true;

            CR.Columns["rows"].HeaderText = "排名";
            CR.Columns["rows"].Width = 150;
            CR.Columns["BusinessUnitIdName"].HeaderText = "组别";
            CR.Columns["BusinessUnitIdName"].Width = 250;
            CR.Columns["SystemUserIdName"].HeaderText = "完成率(回执总量/本组任务量)";
            CR.Columns["SystemUserIdName"].Width = 300;
            CR.Columns["zhoujifen"].HeaderText = "本周积分量";
            CR.Columns["zhoujifen"].Width = 200;
            CR.Columns["zong"].HeaderText = "总回执量";
            CR.Columns["zong"].Width = CR.Width - 850;
        }

2.foreach循环后增加汇总行

public static void ZuZhou()
        {   
            StringBuilder messb = new StringBuilder();
            if (mrzuznow != null)
            {
                messb.Append(@"<table width=""100%"">");
                messb.Append("<tr>");
                messb.Append(@"<td colspan=""4"">");
                messb.Append("【本周小组排名】:");
                messb.Append("</td>");
                messb.Append("</tr>");
                messb.Append("<tr>");
                messb.Append("<td>");
                messb.Append("排名 ");
                messb.Append("</td>");
                messb.Append("<td>");
                messb.Append(" 组别");
                messb.Append("</td>");
                messb.Append("<td>");
                messb.Append("回执总量 ");
                messb.Append("</td>");
                messb.Append("<td>");
                messb.Append("完成率 ");
                messb.Append("</td>");
                messb.Append("<td>");
                messb.Append("本周回执量 ");
                messb.Append("</td>");
                messb.Append("</tr>");

                foreach (DataRow item in mrzuznow.Tables[0].Rows)
                {
                    messb.Append("<tr>");
                    messb.Append("<td>");
                    messb.Append("TOP:【" + item["rows"].ToString() + "】");
                    messb.Append("</td>");
                    messb.Append(@"<td>" + item["BusinessUnitIdName"].ToString() + "");
                    messb.Append("</td>");
                    messb.Append(@"<td>" + item["zong"].ToString() + "");
                    double i = Math.Round(Convert.ToDouble(item["bv"]), 2);
                    string ii = (i * 100).ToString() + "%";
                    messb.Append("<td >" + ii + "");
                    messb.Append("</td>");
                    messb.Append(@"<td>" + item["zhoujifen"].ToString() + "");
                    messb.Append("</td>");
                    messb.Append("</tr>");

                }

                int rows = mrzuznow.Tables[0].Rows.Count + 1;

                int sumzhoujifen = 0;
                foreach (DataRow item in mrzuznow.Tables[0].Rows)
                {
                    sumzhoujifen +=Convert.ToInt32( item["zhoujifen"]);
                }
                int Sumzong = 0;
                foreach (DataRow item in mrzuznow.Tables[0].Rows)
                {
                    Sumzong += Convert.ToInt32(item["zong"]);
                }
                

                double d = Convert.ToDouble(Sumzong) / 38291;
                string SumSystemUserIdName = string.Format("{0:0.00%}", d);   //得到完成率

                messb.Append("<tr>");
                messb.Append("<td>");
                messb.Append("");
                messb.Append("</td>");
                messb.Append("<td>");
                messb.Append(" 合计");
                messb.Append("</td>");
                messb.Append("<td>");
                messb.Append("" + Sumzong + "");
                messb.Append("</td>");
                messb.Append("<td>");
                messb.Append("" + SumSystemUserIdName + " ");
                messb.Append("</td>");
                messb.Append("<td>");
                messb.Append(""+sumzhoujifen+"");
                messb.Append("</td>");
                messb.Append("</tr>");
                messb.Append("</table>");
			}
		}


### 如何在C#中使用Task进循环处理 在C#中,`Task` 是一种用于执异步操作的强大工具。当涉及到并循环处理时,可以利用 `Task` 来提高性能和效率。下面是一个完整的示例,展示如何使用 `Task` 进循环处理。 #### 示例代码 以下代码展示了如何在一个列表中计算平方和,并通过并方式加速整个过程: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { List<int> numbers = new List<int>() { 1, 2, 3, 4, 5 }; long sum = 0; // 创建一个任务集合来存储所有的子任务 List<Task<long>> tasks = new List<Task<long>>(); foreach (var num in numbers) { // 将每个数的平方计算封装到单独的任务中 tasks.Add(Task.Run(async () => { await Task.Delay(10); // 模拟耗时操作 return (long)(num * num); })); } // 等待所有任务完成并将结果汇总 long[] results = await Task.WhenAll(tasks); sum = results.Sum(); Console.WriteLine($"Total Sum of Squares: {sum}"); } } ``` 此代码片段创建了一系列独立的任务,这些任务分别负责计算输入列表中每个整数的平方值[^2]。随后,通过 `Task.WhenAll` 方法等待所有任务完成后获取它们的结果,并将其累加得到总和。 #### 关键点解析 - **Task.Run**: 此方法允许将工作卸载到线程池中的某个线程上运,从而实现并发执[^2]。 - **Task.WhenAll**: 它接受一组任务作为参数,在所有指定的任务都已完成之后才继续向下执。这种方法非常适合于需要收集多个异步操作结果的情况。 - **异常处理**: 如果任何一个任务抛出了未捕获的异常,则会打包成 `AggregateException` 提供给调用者。因此建议始终围绕可能引发错误的操作设置合适的异常捕捉逻辑。 #### 使用 ContinueWith 的替代方案 虽然可以通过 `.ContinueWith()` 实现后续动作定义[^1][^3],但在现代 C# 编程实践中更推荐采用基于 `async/await` 的风格因为其语法更为直观易懂且减少了回调地狱的风险。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值