PDA

View Full Version : سوال: چگونه به متغیر نوع var بیرون از if دسترسی پیدا کنم؟



fa_karoon
سه شنبه 23 اردیبهشت 1393, 13:59 عصر
سلام دوستان یه مقدار با عرض پوزش مجبورم سوالم رو با تفسیر بیان کنم: ببینید من یه select دارم که اگر شرایط a برقرار باشه فیلدهای الف و ب و ج رو باید برگردونه و اگر شرایط b برقرار باشه فیلدهای الف و ب و د رو باید برگردونه، کد select اینی هست که پایین می ذارم

var query = (object) null; if (members.SD.currentLanguage == "fa") {
query = from x in dbEN.MainProducts where x.ParentID == 3 || x.ParentID == 42 select new { x.MainProductID, x.ParentID, x.FullNamefa }; }
else{ query = from x in dbEN.MainProducts where x.ParentID == 3 || x.ParentID == 42 select new { x.MainProductID, x.ParentID, x.FullNameen }; }
خوب من اول می خواستم تو if یه متغیر داشته باشم که اسم فیلد مورد نظرم رو برای واکشی کردن تحت شرایط if , else توش بریزم بعد خارج از if,else ام اون متغیر رو به عنوان یکی از فیلدهایی که موقع select new می خوام برگردونم قرار بدم که شاید به دلیل عدم داشتن اطلاعات موفق نشدم
بعد این کاری رو که الان تو کد می بینید انجام دادم یعنی مقدار null رو آبجکت کردم و به متغیر نوع var دادم تا تویه if ,else و بعد خارج از اون بتونم بهش دسترسی داشته باشم اما مشکل اینجاست که وقتی می خوام foreach بنویسم می گه نوع object یه نوع شمارشی نیست و نمی تونی با foreach به سطرهاش دسترسی داشته باشی؟؟؟ امیدوارم صورت سوالم واضح بوده باشه، لطفا دوستان اگر برای مورد اول یا دوم راهکاری به ذهنشون می رسه، راهنمایی کنند خدا خیرتون بده ممنون و سپاسگزارم

Mahmoud.Afrad
سه شنبه 23 اردیبهشت 1393, 16:28 عصر
یک کلاس واسط برای نمایش اطلاعات تعریف کن

class P
{
public int MainProductID { get; set; }
public int ParentID { get; set; }
public string FullName { get; set; }
}

و در سلکت شئ ای از این کلاس بساز و مقداردهی کن. از اونجایی که دو کوئری شبیه به هم هستنند میتونی یک کوئری بنویسی و شرط رو داخل اون بررسی کنی.

IEnumerable<P> query = from x in dbEN.MainProducts
where x.ParentID == 3 || x.ParentID == 42
select new P
{
MainProductID = x.MainProductID,
ParentID = x.ParentID,
FullName = (members.SD.currentLanguage == "fa" ? x.FullNamefa : x.FullNameen)
};