PDA

View Full Version : سوال: مشکلاتی در Linq



parvizwpf
یک شنبه 05 خرداد 1392, 21:18 عصر
سلام.
فرض میکنیم یک موجودیت entityFramework داریم:



public class Person
{
public int key{get;set;}
public string name{get;set}
public string family{get;set;}

}


سپس میخواهیم در جایی مقادیر آنرا برای یک کامبو بفرستیم. چه میکنیم :


from x in person select new{x.key,lname=x.name+ " "+x.family}}


حالا این اطلاعات در کامبو نمایش داده میشوند. من میتونم این کدها رو مستقیم در فرمی که کامبو قرار دارده استفاده کنم. حالا میخوام این کد توی یک متد نوشته بشه و من بتونم خروجی اون رو بگیرم و در کامبو قرار بدهم. خروجی احتمالا باید از نوع IEnumerable<Person> باشه. ولی وقتی میخوام سلکتم رو مثل بالا دست کاری کنم و بگم این فیلد و این فیلد رو فقط تو سلکت بیار دیگه خروجی IEnumerable<Person> نیست.خروجی متد باید چی باشه تا اون رو بتونم تو به کامبو یا یه گرید ویو قرار بدم؟
یه سوال دیگه اینکه اگه بخوام دقیقا کوئری بالا رو بصورت Method Syntax بنویسم چی میشه؟ میدونم باید از متد select() استفاده کنم ولی نمیدونم چی توش بنویسم.
متشکر....

Mahmoud.Afrad
یک شنبه 05 خرداد 1392, 21:28 عصر
خروجی را از نوع IEnumerable بگیر.

parvizwpf
یک شنبه 05 خرداد 1392, 21:35 عصر
IEnumerable خالی منظورته ؟ میگم گرفتم ولی وقتی فیلدهای سلکت رو دستی میدی مثلا میگی این فیلد و اون فیلد رو فقط تو سلکت بیار دیگه Ienumerable نیست.

Hajivandian
یک شنبه 05 خرداد 1392, 21:35 عصر
سلام,

person.Select(x=>new{x.key,lname=x.name+ " "+x.family});

برای نشون دان اون توی کامبو باکس هم میشه به صورت زیر نوشت:

var query = person.Select(x=>new{x.key,lname=x.name+ " "+x.family});
combobox.DataSource = query.ToList();
combobox.ValueMember = "key";
combobox.DisplayMember = "lname";

Mahmoud.Afrad
یک شنبه 05 خرداد 1392, 21:53 عصر
IEnumerable خالی منظورته ؟
بله.
مثال:

private void button2_Click(object sender, EventArgs e)
{
listBox1.DataSource = Getlist();
listBox1.DisplayMember = "FullName";
}

private IEnumerable Getlist()
{
return from t in db.Table1
select new
{
Id = t.id,
FullName = t.fname + " " + t.lname
};
}

parvizwpf
یک شنبه 05 خرداد 1392, 22:16 عصر
باور کن کد من اینه:

public Enumerable query()
{

using(FamilyFirmsEntities ff=new FamilyFirmsEntities())
{
var q = from x in ff.Companies select new {x.CompanyTitle,x.CompanyID };
return q;
}
return null;
}


ولی به q ارور میده :
cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.Enumerable'

parvizwpf
یک شنبه 05 خرداد 1392, 22:23 عصر
آقا شمرنده من I نمیگذاشتم.
حالا مشکل اینه تو ام وی سی:

ViewBag.CompanyList = new SelectList(query,"CompanyID","CompanyTitle",InformationSingleton.currentCompany);

ارور:
Argument 1: cannot convert from 'method group' to 'System.Collections.IEnumerable'

parvizwpf
یک شنبه 05 خرداد 1392, 22:39 عصر
دوستن واقعا شرمنده شدیدا هول شدیم. سوتی پشت سوتی. مشکل حل شد خیلی خیلی ممنون.جبران میکنم. سوال بعدی من اینه که اکه همین کوئری رو بخوام بصورت extension methods بنویسم به چه طورته؟ from x in ff.Companies select new {x.CompanyTitle,x.CompanyID };

Mahmoud.Afrad
دوشنبه 06 خرداد 1392, 11:36 صبح
آقای Hajivandian (http://barnamenevis.org/member.php?188317-Hajivandian) قبلا مثال زدند.


این طوری ff.Companies.Select(x => new {x.CompanyTitle,x.CompanyID });

parvizwpf
سه شنبه 07 خرداد 1392, 00:17 صبح
بسیار سپاسگزارم. بله درست میفرمایید. من اصلا حواسم نبود.