我正在构建一个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.IEnumerable1[TravelCentres.Models.TravelCentre]]]' to type 'System.Linq.IQueryable
1 [TravelCentres.Models.Market]'。块引用
答案 0 :(得分:1)
result
不是IQuerytable<Market>
,它是具有属性Market
和TravelCenters
的匿名类型的IQueryable。所以(IQueryable<Market>)result
是一个无效的演员。建议使用Market
和TravelCenters
属性创建一个模型,然后返回该模型。
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;