C # Core 2.0 - получить данные из одной модели на основе данных в другой модели? - PullRequest
0 голосов
/ 29 мая 2018

Я использую .NET Core 2.0

У меня есть 2 таблицы:

Movies
ID | Name | AuthorId
----------------------
1  | AAAA | 1
2  | BBBB | 1
3  | CCCC | 1
4  | DDDD | 2

Reviews
ID | FilmId | AuthorId | SomeText
------------------------------------
1  | 1        | 1        | this is horror
2  | 1        | 2        | this is comendy
3  | 3        | 1        | it may be horror
4  | 3        | 2        | it is definitely comedy, not horror

Мои модели:

class Movie {
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public int AuthorId { get; set; }

    public List<Review> Reviews { get; set; }
}

class Review {
    [Key]
    public int ID { get; set; }
    public string SomeText { get; set; }
    public int AuthorId { get; set; }

    public int FilmId  { get; set; }
    public Movie Film { get; set; }
}

Мой контекст:

public class MyContext : DbContext
    {
        public DbSet<Movie> Movie { get; set; }
        public DbSet<Review> Review { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Movie>().HasMany(m => m.Reviews).WithOne(r => r.Film);
        }
    }

Теперь я хочу сделать такой запрос:

SELECT * FROM Movies m ОБЪЕДИНЕНИЕ рецензий r ON (m.ID == r.FilmId) WHEREm.AuthorId = 1 AND (r.AuthorID = 3 ИЛИ r.SomeText LIKE '% определенно%');

Ожидаемый результат должен быть CCCC .

В настоящее время у меня есть:

List<Movie> movies = _context.Movie.Include(m => m.Reviews.Select(r => r.AuthorId == 3 || r.SomeText.Contains("definitely"))).ToList();

Как выразить вышеуказанный запрос с помощью этой записи?

Однако я получаю:

InvalidOperationException: выражение свойства 'm => {из Review r в m.Reviews select (([[r] .AuthorId == __user_ID_0) OrElse [r] .SomeText.Contains ("безусловно"))}' недопустимо.Выражение должно представлять доступ к свойству: 'r => r.MyProperty'.Для получения дополнительной информации о включении связанных данных см. http://go.microsoft.com/fwlink/?LinkID=746393.

Я прочитал эту статью, но она мне ничего не дала.

1 Ответ

0 голосов
/ 29 мая 2018

Я думаю, что этот запрос linq возвращает правильный результат (так как я не могу его проверить)

List<Movie> movies = _context.Movie.where(m => m.AuthorId == 1 && m.Reviews.Any(r => 
r.AuthorId == 3 ||  r.SomeText.Contains("definitely"))).ToList();
...