PDA

View Full Version : ارسال IQueryable به يك تابع



IFA_USER
یک شنبه 23 اسفند 1388, 12:02 عصر
سلام
من يه شي به صورت زير در سي شارپ تعريف مي كنم



Patient_BusinessEntity Be = new Patient_BusinessEntity();
IQueryable<PatientDataAccess> Query = Be.GetAllRow();


حال مي خواهم شي كوئري را براي يك فانشن بفرستم و در آنجا روي اين سطر هاي اين شي لوپ بزنم .
در ضمن ان فانشن بايد براي نمونه هاي مشابه كه (از كلاسهاي مختلف ) مثلاَ





Hospital_BusinessEntity Be = new Hospital_BusinessEntit();
IQueryable<HospitalDataAccess> Query = Be.GetAllRow();

. تعريف پارامتر اون تابع و نحوه استفاده چه طور بايد باشه .

متشكرم
IFA

Vahid_moghaddam
یک شنبه 23 اسفند 1388, 12:23 عصر
از متدهای ژنریک استفاده کنید

void Method<T>(ref IQueryable<T> var1)
{
//Your Code
}

و برای فراخوانی:


Method<PatientDataAccess> (ret Query);

IFA_USER
یک شنبه 23 اسفند 1388, 14:55 عصر
سلام
از كمكتون ممنون
راه حل كاملاَ درست بود

اما زماني كه در متد من قصد لوپ زدن روي ايتمهاي مجموعه رو دارم
نمي دونم بايد چيكار كنم . لوپ و گذاشتم اما دسترسي به ستونها
نميدونم چه جوريه




void Method<T>(ref IQueryable<T> qu)
{
foreach (T item in qu)
{

}
}


با تشكر
IFA

IFA_USER
دوشنبه 24 اسفند 1388, 09:50 صبح
سلام
در زمان اجرا item تمام property ها رو داره و مقاديرش هم درسته اما نمي دونم چه طوري ازش تو زمان نوشتن برنامه استفاده كنم

با تشكر
IFA

IFA_USER
دوشنبه 24 اسفند 1388, 11:34 صبح
سلام
من تونستم جواب و بدست بيارم
اينجا قرارش ميدم تا اگر كسي مشكل منو داشت مشكلش حل بشه
مسئله كلي اين بود كه قصد داشتم يك متد كلي بنويس كه بتونم كلاسهاي متفاوتي از IQueryable ها رو به اون ارسال كنم(يعني نوع دادهاي يا كلاسهاشون متفاوت باشه) و بتونم توي آن لوپ هم بزنم و با مقادير فيلدها كار كنم .
تابع در كلاس پابليك



void Method<T>(IQueryable<T> qu,Func<T,string, object> RetunFieldValue)
{
foreach (T item in qu)
{

object Age_Patient = RetunFieldValue(item, "Age_Patient");
object Fname_Patient = RetunFieldValue(item, "Fname_Patient");

}
}


نحوه مقدار دهي در هر كلاسي كه نياز به فرا خواني داريم




public void ItemsRequested_Sk_Patient()
{

Patient_BusinessEntity Be = new Patient_BusinessEntity((Guid)Session["Sk_User"], (Guid)Session["Sk_BusinessUnit"]);
IQueryable<PatientDataAccess> Query = Be.GetAllRow();

Method<PatientDataAccess>(Query, RetunFieldValue);

}



private object RetunFieldValue(PatientDataAccess it, string FieldName)
{
Object FieldValue = null;
if (FieldName == "Age_Patient") { FieldValue = it.Age_Patient; }
if (FieldName == "Fname_Patient") { FieldValue = it.Fname_Patient; }
return FieldValue;
}


با تشكر
IFA