Если вы используете именованный тип, просто объявите переменную с этим типом перед if
, но тогда вопрос будет тривиальным.
Итак, я предполагаю, что вы выбираете анонимный тип, поэтому вы не можете явно объявить переменную с этим типом.
Здесь подойдет пример, приведенный в качестве примера. Но это не кажется хорошим решением. Вероятно, создание именованного типа - лучшая идея.
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};
}
Или в вашем конкретном примере можно было бы проецировать только после условного:
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});
Or:
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});
Или даже просто:
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});
Какой из них подходит, зависит от того, насколько вы упростили свой вопрос.
person
CodesInChaos
schedule
05.01.2012
x.*
вы имеете в виду построение анонимного типа, верно? Если нет, то почему вы настаиваете на неявной типизации? - person CodesInChaos   schedule 06.01.2012select new {columnA, columnB, columnC}
. Извините за упрощение. - person FMFF   schedule 06.01.2012where
запроса LINQ, вы можете избежать всей проблемы: удалить блокif
и изменить предложениеwhere
наwhere x.CostOfLiving == ((city == "New York City") ? "VERY HIGH" : "MODERATE")
. В более сложном случае замените предложениеwhere
соответствующим универсальным предикатом ... - person Dan J   schedule 06.01.2012WHERE
будет отсутствовать в моейelse
части. Вместо того, чтобы редактировать код, я оставляю его для контекста. В любом случае предложение Эрика сработало для меня. Спасибо, SOF. - person FMFF   schedule 06.01.2012