【问题标题】:cannot be called with instance of type 'System.Data.Entity.Core.Objects.ObjectQuery不能使用“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.DbSet1[Project.Models.AspNetUser]' cannot be called with instance of type 'System.Data.Entity.Core.Objects.ObjectQuery1[Project.Models.AspNetUser]”上声明的方法“Project.Models.AspNetUser Find(System.Object[])”

【问题讨论】:

    标签: c# asp.net-mvc linq entity-framework asp.net-mvc-3


    【解决方案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 =&gt; c.Discussion_ID == Discussion_ID).ToList();
    • 你真是个天才
    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 2020-04-07
    • 2015-11-27
    • 1970-01-01
    • 2016-05-23
    • 2016-01-01
    相关资源
    最近更新 更多