读书人

linq to datatable 查询有关问题

发布时间: 2012-09-23 10:28:11 作者: rapoo

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));            }        }    }
[解决办法]
谢谢分享

读书人网 >.NET

热点推荐