简体   繁体   English

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

[英]IQueryable<T> Join with Where Condition Entity Framework 6.0

I am trying to use where condition with IQueryable<T> Join approach but find no resources to give me clue how how to filter records based on child table field.我正在尝试将 where 条件与IQueryable<T> Join 方法一起使用,但找不到任何资源来告诉我如何根据子表字段过滤记录。

eg Normal query that I want to execute via IQueryable<T> Linq Statement:例如,我想通过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

Here is my code which works well without where statement:这是我的代码,在没有 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 });

Now how to add where condition to match with child table vsk_media_albums (where v.albumid=47) in above IQueryable Statement.现在如何在上面的 IQueryable 语句中添加 where 条件以匹配子表vsk_media_albums (其中 v.albumid=47)。

I tried my best to find solution but not found any good resource in web.我尽力寻找解决方案,但没有在网络上找到任何好的资源。 I am not interested in normal Linq Statement.我对普通的 Linq 语句不感兴趣。

You could try this using extension methods:您可以使用扩展方法尝试此操作:

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

Or using the linq structure:或者使用 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();

I know this has already been answered, but you should have navigations properties set up on vsk_media, then you can do this (assuming you navigation property from media to media_album is called "Albums"):我知道这已经得到了回答,但是您应该在 vsk_media 上设置导航属性,然后您可以执行此操作(假设您从 media 到 media_album 的导航属性称为“相册”):

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

If you don't need the album info beyond just filtering based on it, then you can do this:如果您不需要专辑信息而不仅仅是基于它进行过滤,那么您可以这样做:

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