首页 文章

c#linq离开加入

提问于
浏览
1

我想执行左连接,它将像在sql server / mysql中工作一样工作 .

例如:mysql:table a LEFT outer JOIN tableb ON b.AId = a.bId

linq:

from b in ctx.tableb.DefaultIfEmpty()

我想也许在条件中加上这个:

b.Aid = a.bId

但是它会像普通的内部联接一样返回结果 .

如果尝试没有它,那么在结果中我得到表b中的所有行,结果为(重复结果) .

我希望它像常规左连接一样从表A返回行:

“LEFT JOIN关键字返回左表(table1)中的所有行,右表(table2)中的匹配行 . 当没有匹配时,结果在右侧为NULL”

有一种方法,查询将像在mysql中一样?

如果我做的很明显,问题解决了,但我不认为这是方式..

谢谢 .

2 回答

  • 0

    How to perform Left Outer Join with LINQ,您可以使您的查询看起来像:

    from b in ctx.tableb                                 
    join a in ctx.tablea on b equals tablea.b into ba
    from c in ba.DefaultIfEmpty()
    select { [ResultFromTableb] = b.[ColumnNameInTableb],..., [ResultFromTablea] = ba = null ? string.Empty : a.[ColumnNameInTablea] }
    

    注意,如果你使用select like

    select ba;
    

    ,并且稍后引用选择行中的列,对于来自 ba 的任何行,您将获得 NullReferenceException 为空(如果您的单列中只有一个空列,则会得到一个空行) .

  • 2

    从表a中将表b中的b连接到等于b.Owner到gj中的g在gj.DefaultIfEmpty()中选择new {a.FirstName,PetName =(c == null?String.Empty:c.Name)};

相关问题