我的ASP.NET MVC项目有一些
章课
和相关的
标记类
虽然一个标签有多个章节,但一个章节上有多个标签,它们有很多关系。
我的问题是:我想在此结构中使用tag.title
进行查询,但LINQ不允许对象;它只会获得string
,int
......等变量。
我感觉有点愚蠢,但我无法弄清楚这个基本的东西:((可能我要休息一下,让它在我的脑海里清楚)
我的模特是:
public partial class Chapter
{
public string Id { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
public partial class Tag
{
public int? TagId { get; set; }
public string Title { get; set; }
public int CallCount { get; set; }
public virtual ICollection<Chapter> Chapters { get; set; }
}
以及db:
public class DataContext : DbContext
{
public DbSet<Chapter> Chapters { get; set; }
public DbSet<Tag> Tags { get; set; }
}
所以我们走了:
var tag = (from t in db.Tags where t.Title.Contains(search_word)).FirstOrDefault();
var chapters = (from c in db.Chapters where (m.Title.Contains(search_word) || m.Tags.Contains(tag)) select c).ToList();
正如我上面所解释的那样;它给出了
此查询的“你应该在查询中使用string,guid,int ...”
错误。我认为我犯了一个逻辑上的失败,但我的大脑停止了反应......
简言之;我想按标签名称搜索,如果你有其他方法,我会很高兴听到它..
任何帮助都将受到高度赞赏。
谢谢!
答案 0 :(得分:1)
你想:
var tag = (from t in db.Tags
where t.Title.Contains(search_word)
select t).FirstOrDefault();
var chapters = (from c in db.Chapters
where m.Title.Contains(search_word)
|| m.Tags.Any(t => t.TagId == tag.TagId)
select c).ToList();