C# 无法使用类型为';System.Data.Entity.Core.Objects.ObjectQuery
我想按用户ID查找用户名 此代码段正在运行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
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.DbSet1[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();