Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架仅包括/选择不同表中的某些属性_C#_Entity Framework_Entity Framework Core_Dbcontext - Fatal编程技术网

C# 实体框架仅包括/选择不同表中的某些属性

C# 实体框架仅包括/选择不同表中的某些属性,c#,entity-framework,entity-framework-core,dbcontext,C#,Entity Framework,Entity Framework Core,Dbcontext,假设我有一个名为GetThreadWithComments()的方法。每个线程有一个用户(创建者)和一个注释列表。每个评论有一个用户(海报) 以下是类(由EF生成): 上述方法不起作用。然而,我不太确定如何正确地做到这一点。我可以使用include,但这将生成所有属性。由于速度是一个问题,我正试图让事情尽可能轻 它不起作用的原因:它无法构建。编译时错误。我得到的两个错误是: 无法将类型“”隐式转换为 及 CS0746无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问权限声

假设我有一个名为
GetThreadWithComments()
的方法。每个线程有一个用户(创建者)和一个注释列表。每个评论有一个用户(海报)

以下是类(由EF生成):

上述方法不起作用。然而,我不太确定如何正确地做到这一点。我可以使用
include
,但这将生成所有属性。由于速度是一个问题,我正试图让事情尽可能轻

它不起作用的原因:它无法构建。编译时错误。我得到的两个错误是:

无法将类型“”隐式转换为

CS0746无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问权限声明

试试这个

var result = db.Threads.Include(thread => thread.Comments);

希望有帮助,

首先,将实体关系定义为
virtual

public User User { get; set; }
应该是

public virtual User User { get; set; }
第二,如果出现稍后发布的编译器错误,请尝试添加成员名称

所以不是

x.User=new{x.User.Username,x.User.Email}

使用

x.User=new{Username=x.User.Username,Email=x.User.Email}

而且里面有太多的
x
。正确的例子是:

db.Threads.Select(x => new
{
    x,
    User = new { Username = x.User.Username, Email = x.User.Email },
    Comments = x.Comments.Select(c => new
    {
        c.Message,
        c.CommentId,
        User = new { Username = c.User.Username, Email = c.User.Email }
    })
});

为什么上述方法不起作用?有什么错误吗?据我所知,实体关系必须声明为
virtual
,因此
public User{get;set;}
应该是
public virtual User{get;set;}
对吗?如果您不纠正此注释
上述操作不起作用。
im向下投票并标记关闭。为什么它不工作,你们的电脑关机了吗,你们的狗吃了吗,是不是产生了一个奇点?我想问题很清楚@ViRuSTriNiTyI将很快编辑我的答案lol.更新。我注意到投了反对票,国旗即将关闭。你能不能冷静下来,我离开了几分钟@MichaelRandall@FerX32撤销了他写的我可以用include,但是是对的。Include将生成注释的所有属性。我只想要很少的财产。例如,CommentID和消息。在您选择之前,它不会加载@ViRuSTriNiTyIt构建后,编译错误消失了。明天凌晨3点,我要测试一下。非常感谢你迄今为止的帮助。
public virtual User User { get; set; }
db.Threads.Select(x => new
{
    x,
    User = new { Username = x.User.Username, Email = x.User.Email },
    Comments = x.Comments.Select(c => new
    {
        c.Message,
        c.CommentId,
        User = new { Username = c.User.Username, Email = c.User.Email }
    })
});