C# 无法使用类型为';System.Data.Entity.Core.Objects.ObjectQuery

C# 无法使用类型为';System.Data.Entity.Core.Objects.ObjectQuery,c#,asp.net-mvc,linq,entity-framework,asp.net-mvc-3,C#,Asp.net Mvc,Linq,Entity Framework,Asp.net Mvc 3,我想按用户ID查找用户名 此代码段正在运行 Discussion_CreateBy = db.AspNetUsers.Find(discussion.CreatedBy).UserName, 这在下面的控制器类中不起作用 Comment_CreateBy = db.AspNetUsers.Find(c.CreatedBy).UserName, public ActionResult Discussion_Preview() { int Discussion_I

我想按用户ID查找用户名

此代码段正在运行

Discussion_CreateBy = db.AspNetUsers.Find(discussion.CreatedBy).UserName,
这在下面的控制器类中不起作用

Comment_CreateBy = db.AspNetUsers.Find(c.CreatedBy).UserName,
    public ActionResult Discussion_Preview()
    {
        int Discussion_ID = 1;

        var discussion = db.AB_Discussion.Where(d => d.Discussion_ID == Discussion_ID).FirstOrDefault();
        var comments = db.AB_DiscussionComments.Where(c => c.Discussion_ID == Discussion_ID);



        DiscussionVM model = new DiscussionVM()
        {

            Disussion_ID = discussion.Discussion_ID,
            Discussion_Title = discussion.Discussion_Name,
            Discussion_Description = discussion.Discussion_Name,
            Discussion_CreateBy = db.AspNetUsers.Find(discussion.CreatedBy).UserName,
            Discussion_CreateDate = discussion.CreatedDate,

            Comments = comments.Select(c => new CommentVM()

            {
                Comment_ID = c.Comment_ID,
                Comment_Description = c.Comment_Discription,
                Comment_CreateBy = db.AspNetUsers.Find(c.CreatedBy).UserName,                    
                Comment_CreateDate = c.CreatedDate

            })

        };



        return View(model);
    }
这是我的模型课

public class DiscussionVM
{
    public int Disussion_ID { get; set; }
    public string Discussion_Title { get; set; }
    public string Discussion_Description { get; set; }
    public Nullable<System.DateTime> Discussion_CreateDate { get; set; }
    public string Discussion_CreateBy { get; set; }

    public string Comment_User { get; set; }

    public IEnumerable<CommentVM> Comments { get; set; }

}

public class CommentVM
{

    public int Comment_ID { get; set; }
    public Nullable<System.DateTime> Comment_CreateDate { get; set; }
    public string Comment_CreateBy { get; set; }
    public string Comment_Description { get; set; }

}
获取以下错误

无法使用类型为“System.Data.Entity.Core.Objects.ObjectQuery”的实例调用在类型为“System.Data.Entity.DbSet
1[Project.Models.AspNetUser]”上声明的方法“Project.Models.AspNetUser Find(System.Object[])

之所以有效,是因为讨论是内存中的对象,因为您正在通过对其调用
FirstOrDefault
执行查询:

var discussion = db.AB_Discussion.Where(d => d.Discussion_ID == Discussion_ID).FirstOrDefault();
另一方面,在以下声明中:

db.AspNetUsers.Find(c.CreatedBy).UserName

c
尚未查询,因为

db.AB_DiscussionComments.Where(c => c.Discussion_ID == Discussion_ID)
返回一个
IQueriable
,而不是实际的注释集合

修复此问题的最简单方法是将您的所有注释都带到内存中(因为您无论如何都需要它们):


正如您所说,我更改了代码段,那么对于代码段,我应该引用什么呢?它是否也会更改
Comment_CreateBy=db.AspNetUsers.Find(c.CreatedBy).UserName
您需要做的唯一更改是:
var comments=db.AB_DiscussionComments.Where(c=>c.Discussion_ID==Discussion_ID).ToList()你真是天才
db.AB_DiscussionComments.Where(c => c.Discussion_ID == Discussion_ID)
var comments = db.AB_DiscussionComments.Where(c => c.Discussion_ID == Discussion_ID).ToList();