How to query many-to-many releationship in EF Core

后端 未结 3 1208
我寻月下人不归
我寻月下人不归 2020-12-16 13:09

I\'m using .NET Core and EF Core for a web project. I\'m struggling how to query a many-to-many releationship. This is what my models look like:

public class         


        
相关标签:
3条回答
  • 2020-12-16 13:23

    Extending @Richard's answer :

    I noticed in Visual Studio 2017 15.5.6 when I do following:

                return _context.Begrip
                .Include(x => x.Categories)
                    .ThenInclude(y => y.<nothing typed in here yet>)
    

    IntelliSense at first tells me that y if of type ICollection of BegripCategory presenting methods suitable for collections what is confusing especially that when I start typing "category" (in place of "nothing typed in here yet") IntelliSense changes as if we were dealing with only a single instance instead of ICollection

    Just a tiny remark, but I hope it will help to save a few minutes time confusion.

    0 讨论(0)
  • If you need to filter a Many-to-Many relationship describe below I recomend to use a LinQ Enumerable Any method like this:

    return result.Where(x => x.Categories.Any(c => c.category == categoryId));
    

    To return a filtered list of entities related by a specific category.

    EntityFrameworkCore Relationship query example

    0 讨论(0)
  • 2020-12-16 13:32

    EF Core won't load related properties automatically, so you'll need to explicitly do this, but something like the following should do the trick:

    var result = context.Begrip
        .Include(x => x.Categories)
        .ThenInclude(x => x.category);
    

    Note, intellisense doesn't always work on .ThenInclude at the moment, but the code should still compile even if it gets a red underline.

    If you're returning this to the view or an API, you'll likely want to map it to a DTO so you don't have to deal with .Categories[0].category.Name etc.

    0 讨论(0)
提交回复
热议问题