我一直在尝试提取三个表的组合查询以获取一些信息,但我似乎无法理解它。
我正在寻找的查询也是类似的
SELECT DISTINCT e.Name AS Actor
FROM Movie AS m
INNER JOIN MovieEmployees AS me
ON m.ID = me.movieID
INNER JOIN Employees AS e
ON me.employeeID = e.ID
到目前为止,我的愚蠢编码尝试看起来像这样,它会引发有关转换类型的错误,因此我认为我使用了错误的变量名称。
错误:
无法隐式转换类型
'System.Linq.IQueryable<AnonymousType#1>'
来'System.Linq.IQueryable<WebApplication2.Entities.Movie>'
。一个明确的 转换存在(你错过了吗? cast?)C:\ Users \ andersona \ Documents \ Visual Studio 2013 \ Projects \ WebApplication2 \ WebApplication2 \ Controllers \ MoviesController.cs 32 17 WebApplication2
IQueryable<Movie> movQuery2 =
from m in db.Movies
join me in db.MovieEmployees on m.ID equals me.movieID
join e in db.Employees on me.employeeID equals e.ID
select new {Name = e.Name };
我的上下文看起来像
public virtual DbSet<Employee> Employees { get; set; }
public virtual DbSet<Location> Locations { get; set; }
public virtual DbSet<Movie> Movies { get; set; }
public virtual DbSet<MovieEmployee> MovieEmployees { get; set; }
public virtual DbSet<Role> Roles { get; set; }
public virtual DbSet<Show> Shows { get; set; }
public virtual DbSet<sysdiagram> sysdiagrams { get; set; }
这种关系看起来像这样
我要做的就是返回一个包含所有这三个表数据的查询,这样我就可以为Views提取某些项目。
即。 return View(queryresults);
任何帮助都会非常感激,如果你能简单解释一下为什么你的方式有效,或者我的方式没有,我会非常感激,因为我希望能够为其他表和视图复制这个方法。
答案 0 :(得分:3)
所以要么你想要一组电影或一组名字。如果你想要一组电影:
IQueryable<Movie> movQuery2 =
from m in db.Movies
join me in db.MovieEmployees on m.ID equals me.movieID
join e in db.Employees on me.employeeID equals e.ID
select m;
或可能只是
IQueryable<Movie> movQuery2 =
from m in db.Movies
select m;
如果您想要一组员工姓名,您可以这样做:
IQueryable<string> query =
from m in db.Movies
join me in db.MovieEmployees on m.ID equals me.movieID
join e in db.Employees on me.employeeID equals e.ID
select e.Name;
或可能只是
IQueryable<string> query =
from me in db.MovieEmployees
join e in db.Employees on me.employeeID equals e.ID
select e.Name;
要选择多个项目,您可以创建匿名类型:
var query =
from m in db.Movies
join me in db.MovieEmployees on m.ID equals me.movieID
join e in db.Employees on me.employeeID equals e.ID
select new {e.Name, m.ID};