2017-01-05 2 views
0

Я создаю веб-API, который, как предполагается, заполняет данные из связанной дочерней таблицы с помощью предложения where. Я попытался использовать include() с where() в соответствии с загрузкой, но без успеха.Извлечение сущностей со связанными таблицами C# с использованием REST API2

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] '.

Blockquote

ответ

1

result не является IQuerytable<Market>, что это IQueryable анонимного типа со свойствами Market и TravelCenters. Таким образом, (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; 
+0

Большое спасибо. Это сработало – Caesar

Смежные вопросы