实体框架无需外键加入

问题描述 投票:0回答:2

我有一个消息表,其中每行都有发送该消息的用户的 ID。 但我无法编辑数据库,并且没有外键。 没有任何关系可以加入吗?

var msgs = (from m in dbContext.messages

                        join a in dbContext.users on m.userid equals a.id into sender
                        where (m.date > LastReceivedDate)
                        orderby m.date

                        select new
                        {
                            Sender = sender.FirstOrDefault(),
                            Message = m
                        })

这是我的代码,它可以运行,但不会返回任何内容。当我取消连接时,我得到结果。

谢谢

.net mysql entity-framework .net-4.0
2个回答
4
投票

除了我对 Craig Stuntzanswer 的评论之外,如果您放弃

.FirstOrDefault()
并且可以处理可能是
null
的发件人,您还可以消除第二个查询,并在单个查询中将其全部返回。如果加入后没有用户。

var msgs = (from m in dbContext.messages
           join a in dbContext.users on m.userid equals a.id into sender
           where (m.date > LastReceivedDate)
           orderby m.date
           select new
           {
               Sender = sender,
               Message = m
           })

0
投票

没有共同属性的连接是两个实体的叉积。以下是如何使用 LINQ 查询进行叉积:

http://alitarhini.wordpress.com/2010/11/20/114/

© www.soinside.com 2019 - 2024. All rights reserved.