DataTable数据如下:部门              外包公司          岗位
ICT业务中心       江阴三维        神舟电脑
ICT业务中心       江阴三维        省通信建设
ICT业务中心       江阴三维        大通通信
这样的一张DataTable,如何把【部门】、【外包公司】列值相同的行取出
取出的格式为字符串  "ICT业务中心-江阴三维"

解决方案 »

  1.   

    以下,部门为DPT, 外包公司简称CPY
    var result = datatable.Select(row=>new {DPT = row.DPT, CPY = row.CPY}).Distinct().ToList();
    foreach(var row in result)
         Console.WriteLine("{0}-{1}",row.DPT, row.CPY);
      

  2.   

    这个估计不好弄吧!因为排序的列名可能不确定,导致“跨行相同”,如下。怎么办?如果查找的列多了怎么办???部门              外包公司          岗位
    ICT业务中心       江阴三维        神舟电脑
    aaaaaaaaaaa       江阴三维        省通信建设
    ICT业务中心       江阴三维        大通通信解决办法,同时获取此表时也获取出符合条件的列(列相同),这个业务用sql语句实现。翻页也不怕!
      

  3.   

    dataTable.Rows[0][i];这个LZ
    这个索引可以根据你的需要来设置
      

  4.   

    这个DataTable是我从接口取出来的,不是从数据库取出来的
      

  5.   


     List<DataRow> list = dtExcel.Select(row => new { DPT = row.DPT, CPY = row.CPY }).Distinct().ToList();这里的row报错 说无法表labda表达式转换为string类型
      

  6.   

    var result = datatable.Select(row=>new {DPT = row.DPT, CPY = row.CPY}).Distinct().ToList();
    请问这里的row是什么类型的呢?
      

  7.   


    //部门与外包公司
            List<string> listDepartComp = new List<string>();
            for (int i = 0; i < dtExcel.Rows.Count; i++)
            {
                //部门
                string departName = dtExcel.Rows[i]["部门"].ToString();
                //外包公司
                string compName = dtExcel.Rows[i]["外包公司"].ToString();
                string departComp = departName + "-" + compName;
                if (!listDepartComp.Contains(departComp))
                    listDepartComp.Add(departComp);
            }
      

  8.   


    刚才有事离开了,没及时跟帖,见谅。
    1. 这是使用LINQ实现的,至于效率,和你自己写循环是差不多的,但是更简洁明了。
    2. 这个lamda式里的row是DataTable中的DataRow,最后得到的result是一个匿名类的List。你之前List<DataRow>是不对的。