PDA

View Full Version : سوال: تعیین خروجی lاز نوع DataTable



elham.a1364
پنج شنبه 24 مرداد 1392, 19:37 عصر
بچه ها من میخوام نتیجه کوئری Linq رو به datatable تبدیل کنم.یعنی میخوام خروجی تابعم،table باشه.مقدار return رو هم نمیذاره var انتخاب کنم که بعد راحت تبدیلش کنم.سرچ زدم اینو پیدا کردم:



var query =
from order in...


DataTable orderTable = query.CopyToDataTable()
;


ولی من این تابع رو نمیبینم. چه جوری میتونم این تبدیل رو انجام بدم؟
چون IEnumerable یا List یا... رو باید نوعشون رو مشخص کرد، که توی خروجی من، هم string هست، هم int، هم.... از اینها هم نشد استفاده کنم. :افسرده:

Mahmoud.Afrad
جمعه 25 مرداد 1392, 03:26 صبح
بهتر بود متد رو کامل میذاشتی مخصوصا کوئری linq .


اینو هم بگم که در استفاده از لینک دیگه به دیتاتیبل نیازی پیدا نمیکنی.

elham.a1364
شنبه 26 مرداد 1392, 07:24 صبح
این تابع منه:

public object Select_Inf(int TId)
{
object Qy = from vw in Enty.Proj where vw.TID == TId select vw;
return Qy;
}

حالا توی UI ام:
var res =Obj.Select_Inf(6);


من میخوام بعد از فراخوانی این تابع، روی row هاش حرکت کنم و مثلا تک تک فیلدهاشو توی textbox ها نشون بدم.

Mahmoud.Afrad
یک شنبه 27 مرداد 1392, 00:26 صبح
اگر مطمئن هستید نتیجه کوئری یک آبجکت هست با متد SingleOrDefault اونو دریافت کنید. خروجی این متد شئ ای از نوع entity هست روش دارید کوئری میزنید(در اینجا از نوع Proj)

public Proj Select_Inf(int TId)
{
return (from vw in Enty.Proj
where vw.TID == TId
select vw).SingleOrDefault();
}

موقع فراخوانی میتونید به پراپرتی هاش دسترسی داشته باشید. مثلا:

var res = Obj.Select_Inf(6);
if (res != null)
{
textBox1.Text = res.Name;
textBox2.Text = res.Family;
// ...
}
else
{
MessageBox.Show("چنین کدی وجود ندارد");
}


اگر نتیجه کوئری چند آبجکت هست میتونی نوع بازگشتی متد رو از نوع IEnumerable<Proj> و یا List<Proj> بگیرید.

public IEnumerable<Proj> Select_Inf(int TId)
{
return from vw in Enty.Proj
where vw.TID == TId
select vw;
}

بعد از فراخوانی متد میتونی در یک حلقه به اعضا دسترسی داشته باشی:

var res = Obj.Select_Inf(6);
if (res != null)
{
foreach (var item in res)
{
listBox1.Items.Add(item.Name);
}
}