que lista inside implement ejemplos and c# asp.net-mvc linq linq-to-sql iqueryable

inside - lista ienumerable c#



Cree una instancia de IQueryable vacĂ­a para usar con Linq en sql (4)

Intenta agregar .ToList ();

var listOppLineData = (from o in db.opportunity_vws where o.fiscal_yr_and_qtr == qtr select o ).ToList();

Actualizar

Y arregla la consulta.

No tendrá nada que iterar sin el .ToList ();

Actualización de Head of Butt

var listOppLineData = (from o in db.opportunity_vws where (whichGroup == "All" || o.Group == whichGroup) && (o.fiscal_yr_and_qtr == qtr) select o);

Coloque su ''corto'' antes del quirófano, entonces la segunda parte nunca se evacúa si no es necesaria. Todavía usaría el .ToList () sin embargo.

Necesito poder tener un parámetro opcional en una consulta Linq, o ser capaz de asignar la consulta a una var en algo así como un IF si ese parámetro opcional necesita ser eliminado de la consulta.

Si configuro la var de consulta dentro de la instrucción IF, entonces me dice que la var no existe en contexto cuando intento recorrerla.

if (whichGroup == "All") { var listOppLineData = (from o in db.opportunity_vws where o.fiscal_yr_and_qtr == qtr select o ); } else { var listOppLineData = (from o in db.opportunity_vws where o.fiscal_yr_and_qtr == qtr && o.Group == whichGroup select o ); } foreach (var data in listOppLineData) //listOppLineData doesn''t exist here {

Necesito establecer la var antes de la instrucción IF, creo, pero no sé a qué configurarlo.

var listOppLineData = ""; // gives me Cannot implicitly convert type ''System.Linq.IQueryable<Forecast.Models.opportunity_vw>'' to ''string'' IQueryable listOppLineData = new IQueryable(); //gives me Cannot create an instance of the abstract class or interface ''System.Linq.IQueryable''


Prueba esto. Puede crear un tipo genérico con T o un tipo específico reemplazando T con su nombre de tipo.

IQueryable listOppLineData = Enumerable.Empty<T>().AsQueryable()


Prueba esto:

IQueryable<opportunity_vw> listOppLineData;

Esto define la variable, pero estás esperando inicializarla.

Además, al ver su consulta, puede hacerlo todo en uno, así:

var listOppLineData = (from o in db.opportunity_vws where o.fiscal_yr_and_qtr == qtr && (o.Group == whichGroup || whichGroup == "All") select o );


Tu problema es que cuando declaras una variable en C #, la declaras solo en el alcance actual. Por lo tanto, si declara la variable listOppLineData en el bloque if , puede usarla solo dentro de ese bloque, pero no en ningún otro lado. (Puede definir otra variable con el mismo nombre en otro bloque, pero sería una variable completamente diferente, por lo que no tendría el valor asignado a la primera variable).

Como ya descubrió, necesita declarar la variable fuera de los bloques if .

Su primer intento no funcionó, porque el compilador vio que usted no especificó explícitamente el tipo de la variable (eso es lo que hace var ) y le asignó una string a la variable. Entonces dedujo que el tipo de la variable es string . Y no puedes asignar algo que no sea una string a dicha variable.

Su segundo intento no funcionó, porque no puede crear una instancia de una interfaz. (Si desea crear una instancia, tiene que ser de un tipo específico, generalmente una clase.) E incluso si lo solucionó, el IQueryable no genérico no conoce el tipo de elementos, por lo que el foreach no lo foreach . t funciona bien

Pero no necesita asignar ningún valor a la variable, ya que está asignada en ambas ramas del if . Y el tipo correcto aquí es el genérico IQueryable<T> , con T siendo opportunity_vw . Eso significa que el código correcto es:

IQueryable<opportunity_vw> listOppLineData; if (whichGroup == "All") { listOppLineData = …; } else { listOppLineData = …; } foreach (var data in listOppLineData) { … }

Si realmente deseaba asignar algún valor a la variable (aunque no hay ninguna razón para hacerlo aquí), podría usar null (que no representa ningún valor):

IQueryable<opportunity_vw> listOppLineData = null;