使用REST API2

时间:2017-01-05 18:52:58

标签: 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 == 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;
        }
  

我收到此异常消息无法转换类型的对象   'System.Data.Entity.Infrastructure.DbQuery 1[<>f__AnonymousType4 2 [System.String,System.Collections.Generic.IEnumerable 1[TravelCentres.Models.TravelCentre]]]' to type 'System.Linq.IQueryable 1 [TravelCentres.Models.Market]'。

     

块引用

1 个答案:

答案 0 :(得分:1)

result不是IQuerytable<Market>,它是具有属性MarketTravelCenters的匿名类型的IQueryable。所以(IQueryable<Market>)result是一个无效的演员。建议使用MarketTravelCenters属性创建一个模型,然后返回该模型。

public class MyModel
{
    public int MarketId { get; set; }
    public IEnumerable<TravelCentre> TravelCentres { get; set; }
}

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;