【发布时间】:2018-07-23 11:06:54
【问题描述】:
假设我有一个名为GetThreadWithComments() 的方法。每个线程有 1 个用户(创建者)并有一个 cmets 列表。每个 cmets 有 1 个用户(海报)。
以下是类(由 EF 生成):
public class Thread
{
public int ThreadId { get; set; }
public int UserId { get; set; }
public string Message { get; set; }
public List<Comment> Comments { get; set; }
public User User { get; set; }
}
public class Comment
{
public long CommentId { get; set; }
public string Message { get; set; }
public int UserId { get; set; }
public int ThreadId { get; set; }
public User User { get; set; }
}
所以基本上,我想加载一个包含用户信息的线程,以及与用户信息相关联的 cmets。我尝试过这样的事情:
db.Threads.Select(x => new
{
x,
x.User = new { x.User.Username, x.User.Email },
x.Comments = x.Comments.Select(c => new
{
c.Message,
c.CommentId,
c.User = new { c.User.Username, c.User.Email }
})
});
以上行不通。但是,我不太确定如何正确执行此操作。我可以使用include,但这会生成所有属性。由于速度是一个问题,我试图让事情尽可能轻。
它不起作用的原因:它没有构建。编译时错误。我得到的两个错误是:
无法将类型 '' 隐式转换为...
和
CS0746 无效的匿名类型成员声明符。必须使用成员分配、简单名称或成员访问来声明匿名类型成员。
【问题讨论】:
-
为什么上面的不行?有什么错误什么的吗?据我所知,实体关系必须声明为
virtual,所以public User User { get; set; }应该是public virtual User User { get; set; }对吧? -
如果您不纠正此评论
The above does not work.我会拒绝投票并标记为关闭。为什么它不起作用,您的计算机是否关闭,您的狗吃了它,是否创建了一个奇点? -
我认为问题很明确。 @ViRuSTRiNiTy
-
我会尽快编辑我的答案,哈哈。更新。我注意到了反对票和关闭的标志。你能不能冷静点,我离开了几分钟。 @MichaelRandall
-
@FerX32 已撤销
标签: c# entity-framework entity-framework-core dbcontext