簡體   English   中英

可查詢<T>加入 Where Condition Entity Framework 6.0

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM