Linq to DataTable


1.定义表结构

DataTable DT = new DataTable();


DT.Columns.AddRange(new[]
{
new DataColumn("YDNo",typeof(string)),
new DataColumn("Company",typeof(string)),
new DataColumn("ManageNo",typeof(string)),
new DataColumn("ShareFee",typeof(decimal))
});

DT.Rows.Add("98001", "福永分公司", "IC-001", 0);
DT.Rows.Add("98002", "南山分公司", "IC-002", 0);
DT.Rows.Add("98003", "福田分公司", "IC-002", 0);
DT.Rows.Add("98004", "福永分公司", "IC-001", 0);
DT.Rows.Add("98005", "福永分公司", "IC-003", 0);
View Code

2.Linq Group by

     foreach (DataRow dr in DT.Rows)
            {
                ////求GSCount(根据ManageNo,Company分组,求每个出车编码下不同公司个数)(去除重复数据)
                DataTable dtTemp =
                    DT.AsEnumerable().Cast<DataRow>().GroupBy(p => new { t1 = p.Field<string>("ManageNo"), t2 = p.Field<string>("Company") }).Select(p => p.FirstOrDefault()).CopyToDataTable();

                var GSCount = from r in dtTemp.AsEnumerable() 
                              where r.Field<string>("ManageNo") == dr["ManageNo"].ToStrValue()
                              group r by r.Field<string>("ManageNo") into m
                              select new
                              {
                                  manageNo = m.Key,
                                  mValue = m.Count()
                              };
                var mGSCount = GSCount.First().mValue;

                ////求SamCount(根据ManageNo,Company分组求相同公司区间数)(不去重)
                var SamCount = from r in DT.AsEnumerable()
                               group r by new { t1 = r.Field<string>("ManageNo"), t2 = r.Field<string>("Company") } into m
                               select new
                               {
                                   manageNo = m.Key.t1,
                                   company = m.Key.t2,
                                   mValue = m.Count()
                               };
                var mSamCount = SamCount.First().mValue;

                dr["ShareFee"] = GSCount.First().mValue;
            }
            DT.AcceptChanges();
View Code

 

转载于:https://www.cnblogs.com/markli/p/8251300.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过以下步骤实现: 1. 创建一个 DataTable 对象。 ```csharp DataTable dt = new DataTable(); ``` 2. 添加列到 DataTable 对象中。 ```csharp dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Age", typeof(int)); dt.Columns.Add("Gender", typeof(string)); ``` 3. 向 DataTable 对象中添加数据。 ```csharp dt.Rows.Add("Tom", 20, "Male"); dt.Rows.Add("Lucy", 18, "Female"); dt.Rows.Add("Jack", 22, "Male"); dt.Rows.Add("Lily", 21, "Female"); ``` 4. 使用 LINQDataTable 对象进行过滤。 ```csharp var query = from row in dt.AsEnumerable() where row.Field<string>("Gender") == "Female" select row; ``` 5. 将过滤后的结果绑定到 DataGridView 控件中。 ```csharp dataGridView1.DataSource = query.ToList(); ``` 完整代码如下: ```csharp DataTable dt = new DataTable(); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Age", typeof(int)); dt.Columns.Add("Gender", typeof(string)); dt.Rows.Add("Tom", 20, "Male"); dt.Rows.Add("Lucy", 18, "Female"); dt.Rows.Add("Jack", 22, "Male"); dt.Rows.Add("Lily", 21, "Female"); var query = from row in dt.AsEnumerable() where row.Field<string>("Gender") == "Female" select row; dataGridView1.DataSource = query.ToList(); ``` 以上代码将会在 DataGridView 控件中显示两行数据,分别是 Lucy 和 Lily 的信息。 ### 回答2: 编程语言中的选择结构是一种常用的控制结构,用于根据条件的真假来决定程序的执行路径。其中,C语言也提供了丰富的选择结构语法来满足不同的需求。 举个例子来说明C语言中的选择结构,假设我们要写一个程序,根据用户输入的成绩来打印不同的评语。如果成绩大于等于90分,那么打印"优秀";如果成绩在80到89之间,打印"良好";在70到79之间,打印"中等";在60到69之间,打印"及格";小于60分,打印"不及格"。我们可以使用C语言中的if-else语句来实现这个逻辑。 具体的代码如下: ``` #include <stdio.h> int main() { int score; printf("请输入成绩:"); scanf("%d", &score); if (score >= 90) { printf("优秀\n"); } else if (score >= 80 && score < 90) { printf("良好\n"); } else if (score >= 70 && score < 80) { printf("中等\n"); } else if (score >= 60 && score < 70) { printf("及格\n"); } else { printf("不及格\n"); } return 0; } ``` 在上述的代码中,我们使用了if-else和if-else if语句来根据用户输入的成绩来判断并打印相应的评语。当用户输入不同的成绩时,程序会根据条件的真假来选择执行对应的语句块,最终输出相应的评语。 通过这个例子,我们可以看到C语言中选择结构的用法和效果,帮助程序根据不同的条件做出相应的决策,从而实现不同的功能。 ### 回答3: 语言中的"++"运算符可用于将变量的值递增1。例如,假设有一个名为count的变量,其初始值为0。如果我们在程序中使用了“count++”这个表达式,那么这个表达式将会使count的值增加1,即count的值会从0变为1。 在下面的示例中,我们使用C语言编写了一个简单的计数器程序,以更好地说明这一点: ```c #include <stdio.h> int main() { int count = 0; // 声明并初始化计数器变量为0 printf("初始值: %d\n", count); count++; // 递增计数器的值,相当于 count = count + 1 printf("递增后的值: %d\n", count); return 0; } ``` 输出结果将是: ``` 初始值: 0 递增后的值: 1 ``` 在这个示例中,我们首先将count变量初始化为0,然后使用“count++”表达式将count的值递增1,最后打印出递增后的值1。 这是C语言中使用"++"运算符的一个简单例子,它适用于递增变量的值。注意,在C语言中还有其他用法,如“++count”可以直接在递增前获取递增后的值。但总体上,“++”运算符是C语言中常见的一种用于对变量进行递增操作的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值