具有左连接的多级linq查询

时间:2017-10-25 17:50:15

标签: linq left-join

我的查询中的关系:

relations

这是我的普通连接查询:

    var query = from myabonamenty in ArAbonamenty
            join nexotowary in Nexo_ARWAL.Asortymenty
            on myabonamenty.Nexo_towar equals nexotowary.Id
            join myklienci in ArKlienci
            on myabonamenty.Id_klient equals myklienci.Id_klient

            join nexoodbiorcy in Nexo_ARWAL.Podmioty
            on myklienci.Nexo_klient equals nexoodbiorcy.Id

            join nexonabywcy in Nexo_ARWAL.Podmioty
            on myklienci.Nexo_klient_do_faktur equals nexonabywcy.Id

            select new
            {
                abonament_id = myabonamenty.Id_abonament,
                towar=nexotowary.Nazwa,
                nabywca= nexonabywcy.NazwaSkrocona,
                odbiorca = nexoodbiorcy.NazwaSkrocona
            };

如何在此查询中创建左连接(myklienci.Nexo_klient - > nexoodbiorcy.Id和myklienci.Nexo_klient_do_faktur-> nexonabywcy.Id)?

1 个答案:

答案 0 :(得分:0)

为应该加入的内容添加into / from / in / DefaultIfEmpty()

var query = from myabonamenty in ArAbonamenty
        join nexotowary in Nexo_ARWAL.Asortymenty
        on myabonamenty.Nexo_towar equals nexotowary.Id
        join myklienci in ArKlienci
        on myabonamenty.Id_klient equals myklienci.Id_klient

        join nexoodbiorcy in Nexo_ARWAL.Podmioty
        on myklienci.Nexo_klient equals nexoodbiorcy.Id into nexoodbiorcyg
        from nexoodbiorcy in nexoodbiorcyg.DefaultIfEmpty()

        join nexonabywcy in Nexo_ARWAL.Podmioty
        on myklienci.Nexo_klient_do_faktur equals nexonabywcy.Id into nexonabywcyg
        from nexonabywcy in nexonabywcyg.DefaultIfEmpty()

        select new
        {
            abonament_id = myabonamenty.Id_abonament,
            towar=nexotowary.Nazwa,
            nabywca= nexonabywcy.NazwaSkrocona,
            odbiorca = nexoodbiorcy.NazwaSkrocona
        };

根据所使用的数据库和LINQ版本,您可能还需要测试null或使用条件运算符进行可能为空的范围变量的列引用:

        select new
        {
            abonament_id = myabonamenty.Id_abonament,
            towar=nexotowary.Nazwa,
            nabywca= nexonabywcy?.NazwaSkrocona,
            odbiorca = nexoodbiorcy?.NazwaSkrocona
        };

        select new
        {
            abonament_id = myabonamenty.Id_abonament,
            towar=nexotowary.Nazwa,
            nabywca= (nexonabywcy !=null ? nexonabywcy.NazwaSkrocona : null),
            odbiorca = (nexoodbiorcy != null ? nexoodbiorcy.NazwaSkrocona : null)
        };