Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IQueryable<;T>;加入Where条件实体框架6.0_C#_.net_Entity Framework_Linq - Fatal编程技术网

C# IQueryable<;T>;加入Where条件实体框架6.0

C# IQueryable<;T>;加入Where条件实体框架6.0,c#,.net,entity-framework,linq,C#,.net,Entity Framework,Linq,我试图使用where条件和IQueryableJoin方法,但没有找到任何资源来提供如何基于子表字段筛选记录的线索 e、 g我想通过IQueryableLinq语句执行的普通查询: Select m.* from vsk_media as m inner join vsk_media_album as v on m.id=v.mediaid where v.albumid=47 以下是我的代码,它在没有where语句的情况下运行良好:

我试图使用where条件和
IQueryable
Join方法,但没有找到任何资源来提供如何基于子表字段筛选记录的线索

e、 g我想通过
IQueryable
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 Query=entities.vsk_media;
Query.Join(entities.vsk_media_相册
,c=>c.id
,cm=>cm.mediaid
,(c,cm)=>新的{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_相册的导航属性称为“相册”):

如果您只需要根据相册信息进行过滤,而不需要相册信息,则可以执行以下操作:

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

什么是“普通linq语句”以及为什么您对它不感兴趣?只需在查询结束时附加
。Where(e=>e.cm.albumid==47)
,然后选择(x=>x.c)我猜他是否只想要vsk_媒体实体。普通linq“从m in entities.vsk_媒体加入。。。其中v.albumid=47,但由于我的项目要求,我更喜欢使用IQuerable语句。@无望,它可以工作,我想:)谢谢,但我想用IQuerable连接语句做同样的事情谢谢,这会很有帮助。目前只需要where操作。“只需要where操作”,所以您永远不需要引用vsk_媒体的相册或相册的媒体,并且除了这一个位置,您永远不加入这两个表?
var list = entities.vsk_media
  .Where(m=>m.Albums.albumid==47);