Как получить список полей от многих ко многим отношениям в ядре entityframework? - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь получить список из текста поля в таблицах тегов.

Я использую C# и asp. net core.
Мои отношения много-ко-многим многие с таблицей соединений.
Как получить текст в таблицах тегов?

public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }

    public ICollection<PostTag> PostTags { get; } = new List<PostTag>();
}

public class Tag
{
    public int Id { get; set; }
    public string Text { get; set; }

    public ICollection<PostTag> PostTags { get; } = new List<PostTag>();
}

public class PostTag
{
    public int Id {get;set;}
    public int PostId { get; set; }
    public Post Post { get; set; }

    public int TagId { get; set; }
    public Tag Tag { get; set; }

    public string AdditionalInfo {get;set;}
}

public class MyContext : DbContext
{
    public DbSet<Post> Posts { get; set; }
    public DbSet<Tag> Tags { get; set; }

    public DbSet<PostTag> PostTags {get;set;}

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder.UseSqlServer(
            @"Server=localhost;Database=Test;Trusted_Connection=True");

}

Программа, приведенная ниже, дает неверный результат.

class Program
{
    static void Main(string[] args)
    {
        var context = new MyContext();
        int _Id = 1;

        var texts = context.Posts
                .Include(p => p.PostTags)
                    .ThenInclude( p => p.Tag)
                .Where( p => p.Id == _Id )
                .Select( p => p.PostTags.Select( pt => pt.Tag).Select( t => t.Text))
                .ToList();

        foreach (var text in texts) {
              Console.WriteLine($" Element # {text}");
         }

    }

}

Результат :

Element # System.Linq.Enumerable+SelectEnumerableIterator`2[Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor+TransparentIdentifier`2[Microsoft.EntityFrameworkCore.Storage.ValueBuffer,Microsoft.EntityFrameworkCore.Storage.ValueBuffer],System.String]

1 Ответ

0 голосов
/ 04 марта 2020

Соединение всех трех таблиц с соответствующими идентификаторами и выбор текстового столбца таблицы тегов даст вам необходимый вывод.

          var texts = from p in context.Posts
            join pt in context.PostTags on p.Id equals pt.PostId
            join tag in context.Tags on pt.TagId equals tag.Id
            select tag.Text;

            foreach (var text in texts)
            {
                 Console.WriteLine($" Element # {text}");
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...