从C#中的三个表查询

时间:2014-05-20 20:03:46

标签: c# sql asp.net-mvc

我一直在尝试提取三个表的组合查询以获取一些信息,但我似乎无法理解它。

我正在寻找的查询也是类似的

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; }

这种关系看起来像这样

enter image description here

我要做的就是返回一个包含所有这三个表数据的查询,这样我就可以为Views提取某些项目。

即。 return View(queryresults);

任何帮助都会非常感激,如果你能简单解释一下为什么你的方式有效,或者我的方式没有,我会非常感激,因为我希望能够为其他表和视图复制这个方法。

1 个答案:

答案 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};