【问题标题】:EF Core: Return all items that have item with property==x in their collectionEF Core:返回所有在其集合中具有属性 ==x 的项目的项目
【发布时间】:2020-05-27 20:06:53
【问题描述】:

感谢您提前提供任何帮助。我开始学习 EF Core,假设我有这 2 个课程:

 public class Post

{
    public Guid Id { get; set; } = Guid.NewGuid();

    public String Name { get; set; }

    public ICollection<Tag> Tags { get; set; }

}



public class Tag

{

    public Guid TagId { get; set; } = Guid.NewGuid();

    public String Name { get; set; }

    public Guid PostId { get; set; }

    public Post Post { get; set; }

}

如何形成一个查询来返回所有带有名称“X”标签的帖子?

【问题讨论】:

    标签: c# database entity-framework ef-code-first


    【解决方案1】:

    请注意,在进行字符串比较时,您可能会遇到一些区分大小写的问题。如果在密码或类似情况下不需要区分大小写,我通常会在比较时将所有内容小写。

    var posts = await context.Posts
        .Where(p => p.Tags.Any(t => t.TagName.ToLower() == "tag name"))
        .ToListAsync()
    

    【讨论】:

    • 是的,搜索了“存在”等价物,这正是我所需要的。谢谢。
    • @ВладиславТрубников 如果这回答了您的问题,请接受它作为答案。谢谢!
    • 根据我的经验,Sql 服务器默认排序规则通常不区分大小写。 ToLower 可能是多余的
    • 是的,默认情况下是这样。它仍然让我感到困惑,因为客户使用了区分大小写的排序规则。只是指出它是一个潜在的问题。我同意这在大多数情况下都可以在没有 .ToLower() 的情况下工作。
    【解决方案2】:

    你可以这样做:

    var postsWithTagX = await context.Post
    .Where(p => p.Tags.Any(t => t.TagId == "The Tag Id you want"))
    .ToListAsync()
    

    编辑:

    你可以从 include 中得到它。

    var tag = await context.Tag
    .Include(x => x.Post)
    .FirstOrDefaultAsync(t => t.TagId == "The Tag Id you want");
    
    var posts = tag.Posts.Tolist()
    

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 2016-12-15
      • 2013-05-15
      • 2018-03-18
      • 2019-07-12
      • 2016-07-23
      • 1970-01-01
      • 2017-10-01
      • 2018-08-13
      相关资源
      最近更新 更多