我用LINQ连接一个DataSet中的两个表,表结构如下:
左表:

右表:

这是我的代码:
var productQuery = this.ds.Tables["product"].AsEnumerable();
var shortQuery = this.ds.Tables["short"].AsEnumerable();
var query =
from p in productQuery
join s in shortQuery
on p.Field<Int32>("shirt_item_id") equals s.Field<Int32>("shirt_item_id") into ps
from item in ps
select new
{
shirt = item.Field<Int32>("shirt_item_id"),
s_quantity = item.Field<Decimal>("s_quantity")
};
为什么这样是未产生任何枚举呢?应该是有6条记录的啊。我是哪里出错了?请大神解惑~
这是我参考的msdn:http://msdn.microsoft.com/zh-cn/library/bb399415%28v=vs.110%29.aspx
------解决思路----------------------
from p in productQuery
join s in shortQuery
on p.Field<Int32>("shirt_item_id") equals s.Field<Int32>("shirt_item_id") into ps
from item in ps.DefaultIfEmpty()
select new
{
shirt = item.Field<Int32>("shirt_item_id"),
s_quantity = item == null ? 0 : item.Field<Decimal>("s_quantity")
};
------解决思路----------------------
1楼已经告诉你方法了,你只需要将select new{}中的所有涉及到右表的取值都加个三元判断就可以了:
var productQuery = this.ds.Tables["product"].AsEnumerable();
var shortQuery = this.ds.Tables["short"].AsEnumerable();
var query =
from p in productQuery
join s in shortQuery
on p.Field<int>("shirt_item_id") equals s.Field<int>("shirt_item_id") into ps
from item in ps.DefaultIfEmpty()
select new
{
shirt = item==null?0: item.Field<Int32>("shirt_item_id"),
s_quantity = item==null?0:item.Field<Decimal>("s_quantity")
};