Nếu bạn đang sử dụng một loại được đặt tên, chỉ cần khai báo một biến với kiểu đó trước khi if
, nhưng sau đó các câu hỏi sẽ là tầm thường .
Vì vậy, tôi giả định bạn đang chọn một loại ẩn danh, vì vậy bạn không thể khai báo một biến rõ ràng với loại đó.
Truyền theo ví dụ sẽ hoạt động tại đây. Nhưng điều đó không giống như một giải pháp tốt. Có lẽ tạo ra một loại tên là một ý tưởng tốt hơn.
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};
}
Hoặc trong ví dụ cụ thể của bạn người ta có thể dự án chỉ sau khi có điều kiện:
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});
Hoặc:
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});
Hoặc thậm chí chỉ:
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});
Đó là một trong thích hợp phụ thuộc vào cách bạn simp lified câu hỏi của bạn.
Tôi cho rằng bạn có thể khai báo biến bên ngoài của các khối. – ChaosPandion
Tôi nhận được "Các biến cục bộ được nhập hoàn toàn phải được khởi tạo" – FMFF
Với 'x. *' Bạn muốn xây dựng một kiểu ẩn danh, phải không? Nếu không, tại sao bạn nhấn mạnh vào đánh máy ngầm? – CodesInChaos