IQueryable<T> 加入 Where 条件实体框架 6.0

irf*_*csd 2 .net c# linq entity-framework

我正在尝试将 where 条件与IQueryable<T>Join 方法一起使用,但找不到任何资源来告诉我如何根据子表字段过滤记录。

例如,我想通过IQueryable<T>Linq 语句执行的普通查询:

Select 
    m.* 
from 
    vsk_media as m 
inner join 
    vsk_media_album as v 
on 
    m.id=v.mediaid 
where 
    v.albumid=47
Run Code Online (Sandbox Code Playgroud)

这是我的代码,在没有 where 语句的情况下运行良好:

IQueryable<vsk_media> Query = entities.vsk_media;
       Query.Join(entities.vsk_media_albums
       , c => c.id
       , cm => cm.mediaid
       , (c, cm) => new { c, cm });
Run Code Online (Sandbox Code Playgroud)

现在如何vsk_media_albums在上面的 IQueryable 语句中添加 where 条件以匹配子表(where v.albumid=47)。

我尽力寻找解决方案,但没有在网络上找到任何好的资源。我对普通的 Linq 语句不感兴趣。

Fel*_*ani 6

您可以使用扩展方法尝试此操作:

var query = entities.vsk_media
                    .Join(entities.vsk_media_album, 
                          m => m.id,
                          v => v.mediaid,
                          (m, v) => new { m, v })
                    .Where(x => x.v.albumid == 47)
                    .Select(x => x.m);

var list = query.ToList();
Run Code Online (Sandbox Code Playgroud)

或者使用 linq 结构:

var query = from m in entities.vsk_media
            join v in entities.vsk_media_album on m.id equals v.mediaid
            where v.albumid = 47
            select m;

var list = query.ToList();
Run Code Online (Sandbox Code Playgroud)