IQueryable <t>加入Where Condition Entity Framework 6.0

时间:2015-09-16 13:30:45

标签: entity-framework linq

我正在尝试使用带有IQueryable<T> Join方法的where where但是找不到资源来告诉我如何根据子表字段过滤记录。

例如,我想通过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

这是我的代码在没有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 });

现在如何在上面的IQueryable Statement中添加where子句与子表vsk_media_albums(其中v.albumid = 47)匹配。

我尽力找到解决方案但没有在网上找到任何好的资源。我对正常的Linq声明不感兴趣。

2 个答案:

答案 0 :(得分:1)

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

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();

或使用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();

答案 1 :(得分:1)

我知道这已经得到了解答,但您应该在vsk_media上设置导航属性,然后您可以执行此操作(假设您从媒体到media_album的导航属性被调用&#34;专辑&#34;):

var list = entities.vsk_media
  .Include(m=>m.Albums)
  .Where(m=>m.Albums.albumid==47);

如果你不需要专辑信息而不仅仅基于它进行过滤,那么你可以这样做:

var list = entities.vsk_media
  .Where(m=>m.Albums.albumid==47);