首页新闻找找看学习计划

asp.net linq left join如何实现

0
悬赏园豆:50 [待解决问题]

碰到一个连接查询问题,如:有两张表,一张表为 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 });

 

这种方法觉得简洁明了多了,可惜的是,这样得出来的只是一般的连接查询,只会得到一条数据。

 

有人有好的方法吗?

Jinwen的主页 Jinwen | 初学一级 | 园豆:176
提问于:2014-06-11 13:39
< >
分享
所有回答(2)
0

你只是传的join需要的两个字段,你没有说明这两个字段是相等的关系啊

刘宏玺 | 园豆:14004 (专家六级) | 2014-06-11 13:43

嗯,是我说漏了,fruit表和catalog表有关联的,查询的结果是保留左表的所有数据,右表不存在的就填充为null,Jion方法里面是fruit=>fruit.id和catalog=>catalog.fruitid,就是条件判断,但是如何增加条件为左表连接?

支持(0) 反对(0) Jinwen | 园豆:176 (初学一级) | 2014-06-11 13:50
0

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 });

科刘 | 园豆:206 (菜鸟二级) | 2015-11-14 16:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册