我正在尝试使用带有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声明不感兴趣。
答案 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);