如果您使用的是命名類型,只是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});
或者:
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});
哪一個適當取決於你如何簡化明確了你的問題。
我想你可以聲明塊外面的變量。 – ChaosPandion 2012-01-05 23:39:19
我得到「隱式類型的局部變量必須被初始化」 – FMFF 2012-01-05 23:41:21
用'x。*'表示構造一個匿名類型,對吧?如果不是,你爲什麼堅持隱式鍵入? – CodesInChaos 2012-01-05 23:46:33