आप एक नामित प्रकार उपयोग कर रहे हैं, बस 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
मुझे "लागू रूप से टाइप किए गए स्थानीय चर प्रारंभ किए जाने चाहिए" – FMFF
'x। *' के साथ आपका मतलब अनाम प्रकार का निर्माण है, है ना? यदि नहीं, तो आप निहित टाइपिंग पर जोर क्यों दे रहे हैं? – CodesInChaos