加入一个包含桥表的表并从主表中获取数据,如果数据存在于桥表中,那么也可以获取它

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加入一个包含桥表的表并从主表中获取数据,如果数据存在于桥表中,那么也可以获取它相关的知识,希望对你有一定的参考价值。

我有两个表“Event(EventId,EventName,....,UpdatedBy)”,“User(UserId,Username ...)”和一个桥表“EventAttendee(EventId,UserId)”

from c in context.Events
from u in c.users 
where c.EventId == eventId
select s

以上是在进行内连接,所以如果EventAttendee表中没有记录,那么我没有得到任何记录。

我想总是从Event表中获取事件详细信息,如果EventAttendee表中有该事件的任何记录,则获取UserId和Username。如何使用Entity框架在linq to sql中执行此操作,因为我的实体模式不显示桥表?

答案

只需添加DefaultIfEmpty()

from e in context.Events
from u in e.users.DefaultIfEmpty()
where e.EventId == eventId
select ...

不确定sselect中是什么,但它可能是类似的东西

select new { e.EventName, UserId = (int?)u.UserId, u.UserName }

这将为您提供所有与会者的活动列表,或者在没有与会者时为null提供与用户相关的数据。

以上是关于加入一个包含桥表的表并从主表中获取数据,如果数据存在于桥表中,那么也可以获取它的主要内容,如果未能解决你的问题,请参考以下文章

多个分区子查询的性能

加入两个表并获取最新的 slug

多表操作

mysql查询加入,比较两个表并返回第一个表中的所有记录

SQL中根据表的顺序选择数据

VBA根据数据值将数据从主表复制并粘贴到另一个表中