我在两个实体之间有一对多的关系:用户(一个)有消息(很多)集合。
需要显示一些关于用户的信息,同时需要加载单个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
我该如何解决?
答案 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();
}