如何创建LINQ to Entities查询,包括标记类名和文本字符串

时间:2012-05-16 13:00:52

标签: entity-framework linq-to-entities asp.net-mvc-4

我的ASP.NET MVC项目有一些

  

章课

和相关的

  

标记类

虽然一个标签有多个章节,但一个章节上有多个标签,它们有很多关系。

我的问题是:我想在此结构中使用tag.title进行查询,但LINQ不允许对象;它只会获得stringint ......等变量。

我感觉有点愚蠢,但我无法弄清楚这个基本的东西:((可能我要休息一下,让它在我的脑海里清楚)

我的模特是:

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 ...”

此查询的

错误。我认为我犯了一个逻辑上的失败,但我的大脑停止了反应......

简言之;我想按标签名称搜索,如果你有其他方法,我会很高兴听到它..

任何帮助都将受到高度赞赏。

谢谢!

1 个答案:

答案 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();