2012-04-11 6 views
8

¿Cuál es el problema con mi código a continuación? No devuelve ningún elemento, incluso cuando los registros coincidentes están presentes en db. Si es incorrecto, ¿cómo puedo convertir mi IQueryable en IEnumerable?convirtiendo iqueryableable en IEnumerable

public IEnumerable<TimelineItem> TimeLineItems { get; set; } 
     public IEnumerable<TimelineItem> GetTimeLineItems(int SelectedPID) 
     { 
      TimeLineItems = (from t in db.TimelineItems 
          where t.ProductID == SelectedPID 
          select new { t.Description, t.Title })as IEnumerable<TimelineItem>; 
      return TimeLineItems; 
     } 

Gracias

Respuesta

6

En mi opinión, si se va a a continuación, utilizar LINQ lo abrazan, deshacerse de esa notación esotérica :)

public IEnumerable<TimelineItem> GetTimeLineItems(int SelectedPID) 
    { 
     return db.TimelineItems.Where(tl => tl.ProductID == SelectedPID) 
     .Select(tl => new TimelineItem { 
      Description = tl.Description, 
      Title = tl.Title }) 
     .AsEnumerable<TimelineItem>(); 
    } 
4

La razón por la que está recibiendo null se debe a que usted está tratando de convertir un IQueryable basado en un una tipo anónimo a IEnumerable<TimelineItem> (new { t.Description, t.Title } crea una instancia de un tipo anónimo con dos campos - Description y Title) Debe eliminar la pieza Select para que funcione.

Si desea seleccionar sólo Description y Title, crear un llamado tipo con estos dos campos, y devolver una IEnumerable de ese tipo:

public class TitleDescr { 
    public string Title {get;set;} 
    public string Description {get;set;} 
} 

public IEnumerable<TitleDescr> GetTimeLineItems(int SelectedPID) 
{ 
    return from t in db.TimelineItems 
        where t.ProductID == SelectedPID 
        select new TitleDescr { t.Description, t.Title }; 
} 
+0

no quiero para seleccionar todo items.I preferible seleccionar solamente descripción y el título, es por eso que estoy usando Seleccionar – Renny

+0

@ sureshcd10cvvc Por favor, vea mi edición para una explicación de lo que debe hacer si necesita una proyección de tu resultado – dasblinkenlight

1

uso asignador automático para convertir IQueryable a IEnumerable

StudentsModel IEmodel = new StudentsModel();//IEnumerable 
      try { 
       var Queryablemodel = _tblStudents.GetQueryable().FirstOrDefault(x => x.CNIC == strCNIC && x.LoginPassword == strPassword);//IQueryable 
       //conversion with Auto Mapper 
       IEmodel = AutoMapper.Mapper.Map(Queryablemodel , IEmodel); 
      } 
      catch(Exception ex){ 
       throw ex; 
      }