使用REST API2检索具有相关表c#的实体

使用REST API2检索具有相关表c#的实体,c#,entity-framework,linq,asp.net-web-api,ef-code-first,C#,Entity Framework,Linq,Asp.net Web Api,Ef Code First,我正在构建一个web API,假设它使用where子句从链接的子表填充数据。 我已尝试按照“急切加载”将include()与where()一起使用,但未成功 public IQueryable<Market> getAllActive() { return db.Markets.Where(c => c.IsActive == true).Include(d => d.TravelCentres.Where(e => e.IsActive =

我正在构建一个web API,假设它使用where子句从链接的子表填充数据。 我已尝试按照“急切加载”将include()与where()一起使用,但未成功

public IQueryable<Market> getAllActive()
    {
        return db.Markets.Where(c => c.IsActive == true).Include(d => d.TravelCentres.Where(e => e.IsActive == true));
public IQueryable getAllActive()
{
返回db.Markets.Where(c=>c.IsActive==true)。包括(d=>d.travelcenters.Where(e=>e.IsActive==true));
}

在研究中,有人建议我使用显式加载,但它保留了有关强制转换数据类型的错误。我现在没有主意了,非常感谢你的帮助。这是我的密码:

private TravelCentresDbContext db = new TravelCentresDbContext();    
public IQueryable<Market> getAllActive()
        {
            //return db.Markets.Where(c => c.IsActive == true).Include(d => d.TravelCentres);
            var result = db.Markets
                .Where(c => c.IsActive == true)
                .Select(p => new
                {
                    Market = p.MarketId,
                    TravelCentres = p.TravelCentres.Where(x => x.IsActive == true)
                });
            return (IQueryable<Market>)result;
        }
private TravelCentresDbContext db=new TravelCentresDbContext();
公共IQueryable getAllActive()
{
//返回db.Markets.Where(c=>c.IsActive==true)。包括(d=>d.travelcenters);
var结果=分贝市场
.其中(c=>c.IsActive==true)
.选择(p=>new
{
市场=市场化,
TravelCentres=p.TravelCentres.Where(x=>x.IsActive==true)
});
返回(IQueryable)结果;
}
我收到此异常消息,无法强制转换类型为的对象 'System.Data.Entity.Infrastructure.DbQuery
1[f_uAnonymousType4
2[System.String,System.Collections.Generic.IEnumerable
1[TravelCentres.Models.TravelCentre]]
键入“System.Linq.IQueryable
1[TravelCentres.Models.Market]”

大宗报价


result
不是
IQuerytable
,它是一个匿名类型的IQuerytable,具有属性
Market
TravelCenters
。因此,
(IQueryable)结果
是无效的强制转换。建议创建一个带有
Market
TravelCenters
属性的模型,然后返回该模型

public class MyModel
{
    public int MarketId { get; set; }
    public IEnumerable<TravelCentre> TravelCentres { get; set; }
}
公共类MyModel
{
公共ID{get;set;}
公共IEnumerable旅行中心{get;set;}
}

var结果=db.Markets
.其中(c=>c.IsActive==true)
.Select(p=>newmymodel()
{
市场=市场化,
TravelCentres=p.TravelCentres.Where(x=>x.IsActive==true)
});
返回(IQueryable)结果;
var result = db.Markets
            .Where(c => c.IsActive == true)
            .Select(p => new MyModel()
            {
                Market = p.MarketId,
                TravelCentres = p.TravelCentres.Where(x => x.IsActive == true)
            });

return (IQueryable<MyModel>)result;