如何在Entity Framework中使用lambda表达式进行查询?

时间:2019-11-16 12:54:43

标签: c# entity-framework lambda

这是我的SQL查询:

select 
    m.Name, s.Time, t.TheaterNumber
from   
    Movies m
join 
    MovieSeanceTheaters mst on mst.MovieId = m.MovieID
join 
    Theaters t on t.ID = mst.TheaterId
join 
    Seances s on mst.SeanceId = s.ID

这是我对Linq查询的尝试:

var result = (from m in _context.Movies
              join mst in _context.MovieSeanceTheaters on m.ID equals mst.MovieId
              join t in _context.Theaters on mst.TheaterId equals t.ID
              join s in _context.Seances on mst.TheaterId equals s.ID
              select new { Film = m.Name, Salon = t.Name, Seans = s.Time }
             ).ToList();

我做了这个尝试,但是我想用lambda作为例子:

var result = movieManager.GetAll().Where(x => x.MovieSeanceTheaters).... 

我做不到。

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,是否要将查询从查询​​语法重写为方法语法?

我们在这里!

var result = _context.Movies
    .Join(_context.MovieSeanceTheaters,
        m => m.MovieID,
        mst => mst.MovieID,
        (m, mst) => new
        {
            m = m,
            mst = mst
        })
    .Join(_context.Theaters,
        temp0 => temp0.mst.TheaterID,
        t => t.ID,
        (temp0, t) =>
            new
            {
                temp0 = temp0,
                t = t
            })
    .Join(_context.Seances,
        temp1 => temp1.temp0.mst.TheaterID,
        s => s.ID,
        (temp1, s) =>
            new
            {
                Film = temp1.temp0.m.Name,
                Salon = temp1.t.TheaterNumber,
                Seans = s.Time
            });

看起来很丑,不是吗?
通常,方法语法更紧凑,更方便。但是在这种情况下,请保持原样。