日期:2014-05-20  浏览次数:20926 次

linq to datatable 查询问题
表结构是这样的
表1:
id Ob_induID  
ID 行业id

表2:
 Ob_induID Indu_name
行业id 行业名称

要达到的效果是
表3
id Indu_name
ID 行业名称
这个是我写的代码
  DataTable b = GetORG();
  var query = a.Select();
  DataTable table = new DataTable();
  table.Columns.Add("Id", typeof(int));
  table.Columns.Add("Indu_name", typeof(string));
  foreach (var item in query)
  {
  DataRow newrow = table.NewRow();
  newrow["id"] = item[0];
  var s = b.Select().SingleOrDefault(c => c[0] ==item[1]);//但是在这里都有问题
  if (s == null)
  {
  newrow["org_uniname"] = "null";
  }
  else
  {
  newrow["org_uniname"] = s.Table.Rows[query.Count()][1];
  }
  table.Rows.Add(newrow); 
  }
  return table;
  }
  else { return null; }


只能用datatable 查询 
希望大家能帮忙解决一下



------解决方案--------------------
下面代码演示Join的用法,T1和T2通过T1.IID == T2.ID关联起来,类似数据库中的FK和PK。然后选择T1.ID和T2.Name组成新类型T3(不用定义,会自动生成的)。

理解一下换成你所需要的DataTable应该就可以了。

C# code

class CJoin
    {
        class T1
        {
            public int ID { get; set; }
            public int IID { get; set; }
        }

        class T2
        {
            public int ID { get; set; }
            public string Name { get; set; }
        }

        static void Test()
        {
            List<T1> data1 = new List<T1>();
            List<T2> data2 = new List<T2>();

            for (int i = 1; i <= 10; i++)
            {
                data1.Add(new T1 {ID = i * 10, IID = i});
                data2.Add(new T2 { ID = i, Name = "Dept " + i });
            }

            var query = from a in data1
                        join b in data2 on a.IID equals b.ID
                        select new { ID = a.ID, Name = b.Name };

            foreach (var item in query)
            {
                Trace.WriteLine(string.Format("ID: {0}, Name: {1}", item.ID, item.Name));
            }
        }
    }

------解决方案--------------------
谢谢分享