1

一直坚持这个,所以我想我会问。我确信我在这里缺少一些简单的东西。尝试通过构建一个简单的应用程序来自学 Asp.net mvc 4。

这是模型:

public class Category
{
    public int Id { get; set; }
    [Required]
    [StringLength(32)]
    public string Name { get; set; }
    //public virtual ICollection<Note> Notes { get; set; }
    private ICollection<Note> notes;
    public ICollection<Note> Notes
    {
        get
        {
            return this.notes ?? (this.notes = new List<Note>());
        }
    }
}

public class Note
{
    public int Id { get; set; }
    [Required]
    public string Content { get; set; }
    [Required]
    [StringLength(128)]
    public string Topic { get; set; }
    public int CategoryId { get; set; }
    public virtual Category Category { get; set; }
    public virtual IEnumerable<Comment> Comments { get; set; }
    public virtual ICollection<Tag> Tags {get; set;}

    public Note()
    {
        Tags = new HashSet<Tag>();
    }
}
public class Tag
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Note> Notes { get; set; }

    public Tag()
    {
        Notes = new HashSet<Note>();
    }
}

我从控制器的存储库中调用此方法:

 public IQueryable<Note> GetAll()
    {
        var query = _db.Notes.Include(x => x.Category).Include(y => y.Tags);
        return query;
    }

在家庭控制器上,我试图返回所有笔记的列表,并希望包括它所属的类别名称以及笔记附带的标签。起初没有出现,所以我阅读了一些关于急切加载的教程并想出了如何让它们显示。

但是,我的方法不是那么有效。由于类别和标签的导航属性再次发送对笔记的查询,迷你分析器向我咆哮重复查询。有没有办法只返回我需要的类别和标签对象的属性?

我尝试了几种方法都没有运气。我希望我能做这样的事情:

var query = _db.Notes.Include(x => x.Category.Name).Include(y => y.Tags.Name);

但我收到一个错误:无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型

在此之前我已经看到该错误是由一些缺少 using 语句引起的,所以我已经仔细检查过。

有什么建议么?谢谢您的帮助

4

0 回答 0