EF Core:如何从collection-nav属性加载单个项目?

时间:2016-11-10 22:24:14

标签: asp.net entity-framework entity-framework-core

我在两个实体之间有一对多的关系:用户(一个)有消息(很多)集合。
需要显示一些关于用户的信息,同时需要加载单个Message。 我尝试做类似的事情:

mycontext.Users.Where(..).Include(user => user.Messages.Take(1).First());

但是这段代码会抛出ecxeption

  

InvalidOperationException:属性表达式'user => {从       消息m在[聊天]。消息选择       [m] => Take(1)=> First()}'无效。表达应该       表示属性访问:'t => t.MyProperty”。欲获得更多信息       关于包括相关数据,请参阅       http://go.microsoft.com/fwlink/?LinkID=746393

我该如何解决?

2 个答案:

答案 0 :(得分:1)

非常简单。而不是尝试从用户加载消息,从消息中加载用户:

mycontext.Messages.Where(..).Include(msg => msg.User);

事实上,你可以更轻松地做到:

mycontext.Messages
.Include(msg => msg.User)
.Where(msg => msg.User...);

因此您不必过滤消息而不是用户

答案 1 :(得分:0)

你不能按照你试过的方式做到这一点。你必须从数据库中检索所有相关的消息,然后在内存中过滤它(IEnumerable),如下所示。

var useList= mycontext.Users.Where(..).Include(user => user.Messages);

 foreach (var u in useList)
  {

      var message= u.Messages.Take(1).First();

  }