碰到一个连接查询问题,如:有两张表,一张表为 fruit, 一张表为 catalog,
fruit表结构为 { id, name },有四条数据:
id name
1 pear
2 orange
3 strawberry
4 blueberry
catalog表结构为 { id, fruitid },有一条数据:
id fruitid
1 3
现在要求实现左连接查询:
1.sql语句:
select * from fruit as f left join catalog as c on f.id = c.fruitid
2.linq:
from f in DbContext.fruit join c in DbContext.catalog
on f.id equals c.fruitid info fc
from dc in fc.DefaultIfEmpty()
select new { f, dc }
以上两种方法都可以实现,但是为了方便简洁,我希望能够用linq的方法来实现
就像:
DbContext.fruit.Join(DbContext.catalog,
fruit=>fruit.id,
catalog=>catalog.fruit,
(fruit, catalog)=> new { fruit, catalog });
这种方法觉得简洁明了多了,可惜的是,这样得出来的只是一般的连接查询,只会得到一条数据。
有人有好的方法吗?
你只是传的join需要的两个字段,你没有说明这两个字段是相等的关系啊
嗯,是我说漏了,fruit表和catalog表有关联的,查询的结果是保留左表的所有数据,右表不存在的就填充为null,Jion方法里面是fruit=>fruit.id和catalog=>catalog.fruitid,就是条件判断,但是如何增加条件为左表连接?
DbContext.fruit.where(a=>a.name=='test').Join(DbContext.catalog.where(a=>a.name=='test'),
fruit=>fruit.id,
catalog=>catalog.fruit,
(fruit, catalog)=> new { fruit, catalog });