如果您使用的是命名类型,只是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