代码之家  ›  专栏  ›  技术社区  ›  David Veeneman

标签系统的LINQ查询:匹配多个标签中的任何一个?

  •  2
  • David Veeneman  · 技术社区  · 14 年前

    我刚开始学习LINQ。我正在创建一个实体框架应用程序,使用规范 Post Tag 模型。A. 岗位 包含 ID , Text ,和 Tags ,和 标签 身份证件 A. Name ,和 Posts

    A. previous thread on StackOverflow 岗位 全部的 对象(A) B 岗位 匹配的 (一) B C) 在名单上?谢谢你的帮助。

    3 回复  |  直到 7 年前
        1
  •  1
  •   David Veeneman    14 年前

    在我贴出这个问题后,我就被答案绊倒了。 PredicateBuilder 为救援干杯!

    这是我的代码,它使用 PredicateBuilder . 设置为扩展方法:

    public static IQueryable<Note> WhereContainsAnyTags(this IQueryable<Note> notes, IEnumerable<Tag> searchTags)
    {
        // Initialize
        var predicate = PredicateBuilder.False<Note>();
    
        // Select Notes that contain any search Tags
        foreach (var searchTag in searchTags)
        {
            var tag = searchTag;
            predicate = predicate.Or(note => note.Tags.Any(t => t.Id == tag.Id));
        }
    
        // Set return value
        return notes.AsExpandable().Where(predicate);
    }
    

    下面是我如何调用代码:

    searchResults = m_ViewModel.ObjectContext.Notes.WhereContainsAnyTags(m_ViewModel.SearchTags);
    
        2
  •  0
  •   Nick Larsen    14 年前

    WhereIn .

    var posts = context.Tags.WhereIn(tag => tag.Name, acceptableValues)
                            .SelectMany(t => t.Posts);
    

    这个 应该给你所有的标签,是名称的一部分,和 SelectMany

        3
  •  0
  •   moi_meme    14 年前

    您也可以使用实体SQL这样做

    var post = ctx.Posts.Where("it.Tags.Id IN (1,2,3)");