PDA

View Full Version : مشکلی در استفاده از lambda



djscsi
چهارشنبه 02 فروردین 1391, 14:10 عصر
دوستان من یه کلاس تو برنامم دارم و یه ارایه از این کلاس اما وقتی دستور زیر رو مینویسم با ارور زیر مواجه میشم ممنون میشم کمکم کنید


List<Class1> lst = Class1Array.Select(p => new { p.DT, p.ID }).ToList();

البته مشکل به خحاطر استفاده از new و انتخاب چند پراپرتی هست ولی نمیدونم چطور حلش کنم
اابته میدونم میشه lst رو از نوع var بگیرم اما میخام بدونم راه بهتری هست


Cannot implicitly convert type 'System.Collect
ions.Generic.Li[LEFT]st<AnonymousType#1>' to 'System.Collections.Generic.List<WindowsFormsApplication3.Class1>'

omid_csh
چهارشنبه 02 فروردین 1391, 16:21 عصر
سلام
بنظرم اینطوری میتونی جواب بگیری

List<Class1> Class1Array = new List<Class1>();

List<Class1> lst = (List<Class1>)Class1Array.Select(p => new { p.Id });

gwbasic
پنج شنبه 03 فروردین 1391, 02:16 صبح
خروجی شما در عبارت lambda یک Anonumous Type‌ هست زیرا فقط دو پراپرتی از Class1 رو انتخاب کردین بنابراین همانطور که خودتون اشاره کردین باید از var استفاده کنید.
اگر می خواهید خروجی تون از جنس کلاس باشه از p=>p استفاده کنید

mohammad272005
جمعه 04 فروردین 1391, 00:17 صبح
کاش میگفتی دقیقا میخوای چکار کنی، تا queryش رو واست مینوشتیم.

djscsi
جمعه 04 فروردین 1391, 01:20 صبح
ممنون از توجه دوستان
query همینه چیز مبهمی توش نیست فقط قراره از کلاسی که 12 پراپرتی داره 2 تاشو بخونه (البته از لیستی از این کلاس) . من میخاسم متغییری از نوع List<var> نگیرم و تو خود List<Class1> بریزم ولی مثل اینکه راهی نیست
البته راه omid_csh به نظر خوبه ولی اینم فقط در مورد لستی از یه کلاس جواب میده و من اگه مثلا یه join استفاده کنم بازم همین مشکل رو دارم

mohammad272005
جمعه 04 فروردین 1391, 01:45 صبح
اگه local میخوای کار کنی، همون var کارت رو راه میندازه:
var lst = Class1Array.Select(p => new { p.DT, p.ID }).ToList();
foreach(var item in lst)
{
//...
}
ولی اگه میخوای بدیش به یه متد دیگه راهی نیست مگه اینکه تو C# 4.0 از dynamic استفاده کنی:
List<dynamic> lst = Class1Array.Select(p => new { p.DT, p.ID }).ToList();
return lst

رافعی مهدی
جمعه 04 فروردین 1391, 13:38 عصر
سلام

با این فرض که DT و ID پراپرتی یا فیلدهایی از Class1 باشند و در صورت سوال به شکل شبه کد نوشته شده باشند، میتوانید بنویسید:


List<Class1> lst = Class1Array.Select(p => p = new Class1 { DT = p.DT, ID = p.ID }).ToList();

Sajjad.Aghapour
شنبه 05 فروردین 1391, 08:00 صبح
استفاده از کلاس Class1 به عنوان خروجی اگر فقط به همین دو فیلد از این کلاس احتیاج دارید چندان جالب به نظر نمیرسه. باید DTO یا Data Transfer Object استفاده کنید...

موفق باشید/