如何为此场景编写此Linq查询?

时间:2013-07-02 15:40:03

标签: entity-framework linq-to-entities

我有一个我需要执行的查询:

return entity.Messages.Include(m => m.User)
                      .Include(m => m.MessageRecipients.Select(u => u.User))
                      .First(m => m.MessageID == messageID);

这在我的本地计算机上工作正常,但它在网络服务器上中断,尽管设置相同。问题是我尝试包含用户

  

包括(m => m.User)

但是用户不再存在于数据库中,因此抛出“Sequence contains no elements”,因为我使用了First()。

问题:有没有办法以某种方式构建查询,因此当用户不在DB中时它不会制动?像SQL中的外连接?

编辑:如果没有用户,我仍然需要返回消息...

2 个答案:

答案 0 :(得分:1)

First()会抛出异常,如果你想在没有元素时返回null或默认值,那么尝试使用FirstOrDefault()。

答案 1 :(得分:0)

似乎唯一的方法是将查询分成两部分:

`var message = entity.Messages                      .Include(m => m.MessageRecipients.Select(u => u.User))                      .First(m => m.MessageID == messageID);

var author = entity.Users.Where(u => u.UserID == message.AuthorUserID).FirstOrDefault();

if(author!= null)     message.User = author;

返回消息

`