[英]IQueryable<T> Join with Where Condition Entity Framework 6.0
我正在嘗試將 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
這是我的代碼,在沒有 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 語句中添加 where 條件以匹配子表vsk_media_albums
(其中 v.albumid=47)。
我盡力尋找解決方案,但沒有在網絡上找到任何好的資源。 我對普通的 Linq 語句不感興趣。
您可以使用擴展方法嘗試此操作:
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();
我知道這已經得到了回答,但是您應該在 vsk_media 上設置導航屬性,然后您可以執行此操作(假設您從 media 到 media_album 的導航屬性稱為“相冊”):
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.