不能使用“System.Data.Entity.Core.Objects.ObjectQuery”类型的实例调用
Posted
技术标签:
【中文标题】不能使用“System.Data.Entity.Core.Objects.ObjectQuery”类型的实例调用【英文标题】:cannot be called with instance of type 'System.Data.Entity.Core.Objects.ObjectQuery 【发布时间】:2015-11-25 04:57:41 【问题描述】:我想通过 userId 查找用户名
此代码 sn-p 工作
Discussion_CreateBy = db.AspNetUsers.Find(discussion.CreatedBy).UserName,
这曾经在以下控制器类中不起作用
Comment_CreateBy = db.AspNetUsers.Find(c.CreatedBy).UserName,
这是我的模型类
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;
这是整个控制器类
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);
出现以下错误
在类型“System.Data.Entity.DbSet
1[Project.Models.AspNetUser]' cannot be called with instance of type 'System.Data.Entity.Core.Objects.ObjectQuery
1[Project.Models.AspNetUser]”上声明的方法“Project.Models.AspNetUser Find(System.Object[])”
【问题讨论】:
【参考方案1】:Discussion_CreateBy = db.AspNetUsers.Find(discussion.CreatedBy).UserName
之所以有效,是因为讨论是一个内存对象,因为您正在通过调用 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
而不是实际的 cmets 集合
修复它的最简单方法是将所有 cmets 放入内存(因为无论如何你都需要它们):
var comments = db.AB_DiscussionComments.Where(c => c.Discussion_ID == Discussion_ID).ToList();
【讨论】:
正如你所说,我改变了代码 sn-p ,那么我应该参考什么代码 sn-p 它也改变了Comment_CreateBy = db.AspNetUsers.Find(c.CreatedBy).UserName
您需要做的唯一更改是:var comments = db.AB_DiscussionComments.Where(c => c.Discussion_ID == Discussion_ID).ToList();
你真是个天才以上是关于不能使用“System.Data.Entity.Core.Objects.ObjectQuery”类型的实例调用的主要内容,如果未能解决你的问题,请参考以下文章
excel 打开时 显示 "不能使用对象链接和嵌入" ,不能使用, 如何处理? 我是Vista系统的
TensorFlow 不能使用 GPU。 tf.test.is_gpu_available() 显示 GPU 但不能使用
未捕获的错误:输入是一个空元素标签,既不能有`children`也不能使用`dangerouslySetInnerHTML`