EF Core: возвращает все элементы, в коллекции которых есть элемент со свойством == x. - PullRequest
0 голосов

спасибо за заранее за любую помощь. Я начинаю изучать 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»?

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Предупреждение: при сравнении строк вы можете столкнуться с некоторыми проблемами с чувствительностью к регистру. Я обычно просто все в нижнем регистре при сравнении, если мне не нужно включать чувствительность к регистру в таких случаях, как коды доступа или что-то в этом роде.

var posts = await context.Posts
    .Where(p => p.Tags.Any(t => t.TagName.ToLower() == "tag name"))
    .ToListAsync()
0 голосов
/ 27 мая 2020

Вы можете сделать это так:

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()
...