一直坚持这个,所以我想我会问。我确信我在这里缺少一些简单的东西。尝试通过构建一个简单的应用程序来自学 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 语句引起的,所以我已经仔细检查过。
有什么建议么?谢谢您的帮助