LINQ如何实现多表关联查询

Hunk_sz 2012-04-29 12:23:37
sql语句:select S.ITEM_CODE,B.BAR_CODE,S.SIZEGROUPID,R.SIZECODE,R.SIZENAME from stock s
inner join barcodes b on b.item_code = s.item_code
left join sizeratio r on r.sizegroupid = s.sizegroupid and r.sizeid = b.sizeid where s.bran_code ='MF';
我在dataset中分别用dtStock,dtBarcodes,dtSizeRatio存放stock,barcodes,sizeratio表中的数据,请问用LINQ如何实现像sql查询一样的结果?
我在数据库中查询是有结果的,可是用下面这个语句就没有结果了,请各位高手给指点一下。谢谢!
var querySize = from s in dtStock.AsEnumerable()
let size = from b in dtBarcodes.AsEnumerable()
join sr in dtSizeRatio.AsEnumerable()
on b.Field<decimal>("sizeid") equals sr.Field<decimal>("sizeid") select new
{
item = b["item_code"],
bar = b["bar_code"],
sizegroup_id = sr["sizegroupid"],
size_id = sr["sizeid"],
size_code = sr["sizecode"],
size_name = sr["sizename"]
}
where s["item_code"] == size.First().item && s["sizegroupid"] == size.First().sizegroup_id && s["bran_code"] == "MF"
select new
{
itemcode = s["item_code"],
barcode = size.First().bar,
sizegroupid = size.First().sizegroup_id,
sizecode = size.First().size_code,
sizename = size.First().size_name
};
...全文
1298 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Astpiy 2012-05-30
  • 打赏
  • 举报
回复
建议你使用“Linqer.exe”,这个工具可以将SQL转换为Linq to Sql
Hunk_sz 2012-05-19
  • 打赏
  • 举报
回复
谢谢q107770540的帮忙,很是奇怪,你给出的语句执行查询同样是没有结果的
你的选择H 2012-05-05
  • 打赏
  • 举报
回复
上面的好像有些问题,更改一下:
var querySize = from s in dtStock.AsEnumerable().Where(x => x.Field<string>("bran_code") == "MF")
join b in dtBarcodes.AsEnumerable()
on s.Field<int>("item_code") equals b.Field<int>("item_code")
join r in dtSizeRatio.AsEnumerable()
on new { sizegroupid = s.Field<decimal>("sizeid"), sizeid = b.Field<decimal>("sizeid") } equals new { sizegroupid = r.Field<decimal>("sizeid"), sizeid = r.Field<decimal>("sizeid") } into leftJoin
from sr in leftJoin.DefalutIfEmpty()
select new
{
item = b["item_code"],
bar = b["bar_code"],
sizegroup_id = sr == null ? 0 : sr["sizegroupid"],
size_id = sr == null ? 0 : sr["sizeid"],
size_code = sr == null ? 0 : sr["sizecode"],
size_name = sr == null ? 0 : sr["sizename"]
};
q107770540 2012-04-29
  • 打赏
  • 举报
回复

var querySize = from s in dtStock.AsEnumerable().Where(x=>x.Field<string>("bran_code")=="MF")
join b in dtBarcodes.AsEnumerable()
on b.Field<int>("item_code") equals s.b.Field<int>("item_code")
join r in dtSizeRatio.AsEnumerable()
on new {sizegroupid=r.Field<decimal>("sizeid") ,sizeid=r.Field<decimal>("sizeid") } equals new {sizegroupid=s.Field<decimal>("sizeid") ,sizeid=b.Field<decimal>("sizeid")} into leftJoin
from sr in leftJoin.DefalutIfEmpty()
select new
{
item = b["item_code"],
bar = b["bar_code"],
sizegroup_id =sr==null?0: sr["sizegroupid"],
size_id = sr==null?0: sr["sizeid"],
size_code = sr==null?0: sr["sizecode"],
size_name = sr==null?0: sr["sizename"]
};

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧