C# Core 2.0 - 根据另一个模型中的数据从一个模型获取数据?
C# Core 2.0 - get data from one model based on data in another model?
我正在使用 .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 查询 returns 是正确的结果(因为我无法测试它)
List<Movie> movies = _context.Movie.where(m => m.AuthorId == 1 && m.Reviews.Any(r =>
r.AuthorId == 3 || r.SomeText.Contains("definitely"))).ToList();
我正在使用 .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 查询 returns 是正确的结果(因为我无法测试它)
List<Movie> movies = _context.Movie.where(m => m.AuthorId == 1 && m.Reviews.Any(r =>
r.AuthorId == 3 || r.SomeText.Contains("definitely"))).ToList();