C# Core 2.0 - 根据另一个模型中的数据从一个模型获取数据?

标签 c# entity-framework linq asp.net-core-2.0 .net-core-2.0

我正在使用 .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 JOIN Reviews r ON (m.ID == r.FilmId) WHERE m.AuthorId = 1 AND (r.AuthorID = 3 OR r.SomeText LIKE '%definitely%');

预期结果应该是CCCC

目前我有:

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

如何用这种表示法表达上述查询?

但是我确实得到了:

InvalidOperationException: The property expression 'm => {from Review r in m.Reviews select (([r].AuthorId == __user_ID_0) OrElse [r].SomeText.Contains("definitely"))}' is not valid. The expression should represent a property access: 'r => r.MyProperty'. For more information on including related data, see http://go.microsoft.com/fwlink/?LinkID=746393.

我已经阅读了这篇文章,但它没有给我任何帮助。

最佳答案

我认为这个 linq 查询返回了正确的结果(因为我无法测试它)

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

关于C# Core 2.0 - 根据另一个模型中的数据从一个模型获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50580775/

相关文章:

c# - 绑定(bind)ContentControl内容以获取动态内容

c# - 在 WPF 中使用 EF Code First 和 SqlCe

c# - 转换为值类型 'Int32' 失败,因为具体化值为 null

entity-framework - 如何从实体对象获取对上级对象的引用

c# - 遍历 string[] List<string> 按字母顺序获取结果

c# - 使用 C# 解析复杂的 JSON

c# - C#中如何访问内部对象的属性

javascript - 当管理员单击注销按钮时,从管理屏幕注销任何用户

linq - 选择和选择很多不同

c# - 如何将 List<Bear> 或 List<Goat> 分配给 List<IAnimal>