Si está utilizando un tipo llamado, simplemente declara una variable con ese tipo antes de la if
, pero entonces la pregunta sería trivial .
Supongo que está seleccionando un tipo anónimo, por lo que no puede declarar explícitamente una variable con ese tipo.
Enviar por ejemplo funcionaría aquí. Pero eso no parece una buena solución. Probablemente, crear un tipo con nombre sea una mejor idea.
var myObject =Enumerable.Empty<RowType>.Select(row=>select new {columnA, columnB, columnC});
if(city == "New York City")
{
myObject= from x in MyEFTable
where x.CostOfLiving == "VERY HIGH"
select select new {columnA, columnB, columnC};
}
else
{
myObject = from x in MyEFTable
where x.CostOfLiving == "MODERATE"
select select new {columnA, columnB, columnC};
}
o en su ejemplo específico se podría proyectar sólo después de que el condicional:
IQueryable<RowType> partialQuery;
if(city == "New York City")
partialQuery=MyEFTable.Where(x=>x.x.CostOfLiving == "VERY HIGH");
else
partialQuery=MyEFTable.Where(x=>x.x.CostOfLiving == "MODERATE");
var myObject=partialQuery.Select(x=>x.new {columnA, columnB, columnC});
O:
Expression<Predicate<RowType>> filter;//Note that this is an Expression, not just a delegate
if(city == "New York City")
filter=x=>x.x.CostOfLiving == "VERY HIGH";
else
filter=x=>x.x.CostOfLiving == "MODERATE";
var myObject=MyEFTable.Where(filter).Select(x=>x.new {columnA, columnB, columnC});
O incluso:
string s;
if(city == "New York City")
s="VERY HIGH";
else
s="MODERATE";
var myObject=MyEFTable.Where(x=>x.CostOfLiving == s).Select(x=>x.new {columnA, columnB, columnC});
Cuál es apropiado depende de cómo simp lified tu pregunta.
supongo que se podría declarar la variable fuera de los bloques. – ChaosPandion
Obtengo "Se deben inicializar las variables locales implícitamente tipadas" – FMFF
Con 'x. *' Te refieres a la construcción de un tipo anónimo, ¿no? Si no, ¿por qué insistes en tipear implícitamente? – CodesInChaos