PDA

View Full Version : سوال: برگرداندن حاصل selectچند ستونه از تابع با کد entity



zahrashoja
چهارشنبه 11 مرداد 1391, 01:44 صبح
سلام.....



public List<News> selectfromnews(int idd)
{

var cell = (from row in ag.News where row.nid == idd select new {row.ndate,row.ntex});

؟؟؟؟؟؟List<News> l = cell.ToList();؟؟؟؟؟؟

؟؟؟؟؟return l;؟؟؟؟؟



از جدول news با استفاده ازین تابع میخوام متن و تاریخ تعدادی از خبر ها رو returnکنم

مثل بالا می خوام یه select چند ستونه داشته باشم و حاصلش رو return کنم ولی var رو که نمیشه return کرد.. و حاصل select چند ستونه رو هم نمیشه ریخت توی List<News>.......
کسی می دونه چکار کنم؟

aa_8788
چهارشنبه 11 مرداد 1391, 11:40 صبح
منم تقریبا همین سوالو دارم. در معماری چند لایه وقتی که می خوام نتیجه join چند جدول رو برگردونم بهترین راه چیه؟ قبلا یک کلاس جدید می ساختم که محتوی بعضی ستون های هر دو جدول رو داشت. می خواستم بدونم به جای ساخت کلاس جدید راه بهتری وجود داره یا نه؟

zahrashoja
چهارشنبه 11 مرداد 1391, 12:12 عصر
قبلا یک کلاس جدید می ساختم که محتوی بعضی ستون های هر دو جدول رو داشت.

یعنی چطوری؟ میشه بیشتر توضیح بدی

aa_8788
چهارشنبه 11 مرداد 1391, 12:56 عصر
public List<News> selectfromnews(int idd)

{



list<news> cell = (from row in ag.News where row.nid == idd select new {row.ndate,row.ntex}).tolist();
return cell;


فکر می کنم این جوری مشکل شما حل شه.

zahrashoja
چهارشنبه 11 مرداد 1391, 13:31 عصر
public List<News> selectfromnews(int idd)

{



list<news> cell = (from row in ag.News where row.nid == idd select new {row.ndate,row.ntex}).tolist();
return cell;


فکر می کنم این جوری مشکل شما حل شه.

نه نمیشه خطا داره تبدیل نوعش :افسرده: ..... خب فک کنم قاعدتن نمیشه یه جدولی که از یه سلکت چند ستونه رو دوباره بریزم توی جدولی با همه اون ستون های قبلی :(((((

gwbasic
چهارشنبه 11 مرداد 1391, 13:47 عصر
نمی دونم چرا می خواین AnonymousType برگردونید چرا خود لیستی از News رو بر نمی گردونید؟ بهتره این کارو بکنید

اما اگه این کار رو می خواین بکنید باید خروجی متد رو IList یا object بگذارین و سمت کلاینت یعنی جایی که از این متد استفاده می کنید باید خروجی رو از همین تایپ IList یا object قرار بدین و سپس توسط این پست (http://msmvps.com/blogs/jon_skeet/archive/2009/01/09/horrible-grotty-hack-returning-an-anonymous-type-instance.aspx) اون رو به همون AnonymousType داخل متد تبدیل کنید و استفاده کنید که البته می بینید که شاید براتون سخت باشه و بهتره از همون روشی که در بالا گفتم استفاده کنید

aa_8788
چهارشنبه 11 مرداد 1391, 14:32 عصر
این رو امتحان کنید:
یک کلاس به پروژه اضافه کنید(مثلا به اسم CustomNews)


public class CustomNews
{
public string ntext { get; set; }
public DateTime ndate { get; set; }
}

پروژه را build کنید و کد قبلی را به این شکل بنویسید:


public List<CustomNews> selectfromnews(int idd)
{

list<CustomNews> cnews = (from row in ag.News where row.nid == idd select new CustomNews {ndate=row.ndate,ntext=row.ntex}).tolist();



retun cnews;


البته مطمئن نیستم بهترین راه باشه

gwbasic
چهارشنبه 11 مرداد 1391, 15:12 عصر
این رو امتحان کنید:
یک کلاس به پروژه اضافه کنید(مثلا به اسم CustomNews)


public class CustomNews
{
public string ntext { get; set; }
public DateTime ndate { get; set; }
}

پروژه را build کنید و کد قبلی را به این شکل بنویسید:


public List<CustomNews> selectfromnews(int idd)
{

list<CustomNews> cnews = (from row in ag.News where row.nid == idd select new CustomNews {ndate=row.ndate,ntext=row.ntex}).tolist();



retun cnews;


البته مطمئن نیستم بهترین راه باشه

قطعا راه شما جواب می ده ولی به این شکل برای هر Projection ای که صورت می گیره ما باید تایپ جدیدی تعریف کنیم که کار جالبی نیست

aa_8788
چهارشنبه 11 مرداد 1391, 18:53 عصر
این رو هم امتحان کنید:


public IQueryable<News> selectfromnews(int idd)

{



var cell =ag.News.ToList().Select(item =>
new news
{
ndate =row.ndate,
ntext= row.ntex
})
.AsQueryable();

return cell;

}


بقیه ستون ها خالی هستند.

zahrashoja
چهارشنبه 11 مرداد 1391, 19:17 عصر
نمی دونم چرا می خواین AnonymousType برگردونید چرا خود لیستی از News رو بر نمی گردونید؟



من فقط چند ستون از چند سطر از جدولم رو می خوام که مثلن بتونم توی گرید ویو نمایشش بدم و با استفاده از تابع هم اینکارو بکنم

zahrashoja
چهارشنبه 11 مرداد 1391, 19:19 عصر
این رو هم امتحان کنید:


public IQueryable<News> selectfromnews(int idd)

{



var cell =ag.News.ToList().Select(item =>
new news
{
ndate =row.ndate,
ntext= row.ntex
})
.AsQueryable();

return cell;

}


بقیه ستون ها خالی هستند.

مرسی.. قسمت ndate =row.ndate,
ntext= row.ntex
رو خطا میده بخاطر row میگه وجود نداره این اسم...

zahrashoja
چهارشنبه 11 مرداد 1391, 19:38 عصر
ببخشید اگه میشه این انواع رو بگین که چطوره ساختارشون

IQueryable

IEnumerable<>

IQueryable<>

List

IList<>

var

aa_8788
چهارشنبه 11 مرداد 1391, 19:43 عصر
ببخشید من اشتباه نوشتم.


var cell =ag.News.ToList().Select(row=>
new news
{
ndate =row.ndate,
ntext= row.ntex
})
.AsQueryable();

zahrashoja
چهارشنبه 11 مرداد 1391, 20:08 عصر
ببخشید من اشتباه نوشتم.


var cell =ag.News.ToList().Select(row=>
new news
{
ndate =row.ndate,
ntext= row.ntex
})
.AsQueryable();


مرسی.. مرسی... فقط یه چیزی من حاصل این تابع رو برای دیتا سورس یه گرید ویو استفاده میکنم و اینجا ستونای خالی رو هم نشون میده که البته اگه لاین ها و هدر گرید رو بردارم نمایشش درسته :)
فقط باید کار با گرید ویو رو هم بیشتر یاد بگیرم ...

gwbasic
پنج شنبه 12 مرداد 1391, 10:55 صبح
من فقط چند ستون از چند سطر از جدولم رو می خوام که مثلن بتونم توی گرید ویو نمایشش بدم و با استفاده از تابع هم اینکارو بکنم

ببینید من می دونم شما می خواین چند ستون ( که بهتره بگین چند پراپرتی )رو نمایش بدین. این هم کاری نداره شما همه News‌ رو بر می گردونین و در DataGridView‌مشخص می کنید که چه پراپرتی هایی نمایش داده بشه!!!

gwbasic
پنج شنبه 12 مرداد 1391, 11:07 صبح
این رو هم امتحان کنید:


public IQueryable<News> selectfromnews(int idd)

{



var cell =ag.News.ToList().Select(item =>
new news
{
ndate =row.ndate,
ntext= row.ntex
})
.AsQueryable();

return cell;

}


بقیه ستون ها خالی هستند.

در مورد این پست مفصلا توضیح دادم که چه اشکالاتی داره و نباید به شکل استفاده بشه !!! اما متاسفانه پست ارسال نشد.
چندین خطای فنی در این query وجود داره که باید اصلاح بشه و اصلاح شدش هم مشه : ag.News.ToList() همین و این هم همون نکته ای هست که من اشاره کردم شما لیستی از موجودیت News بر می گردونین و سپس اون پراپرتی هایی که مد نظرتون هست رو نمایش می دین

فقط این نکته رو بهش اشاره کنم که ما وقتی از AsQueryAble استفاده می کنیم که به اجرای به تعویق افتاده نیاز داریم و حالا اگه قبل از اون از ToList‌استفاده کرده باشیم ، این متد باعث می شه که Query‌اجرا بشه پس استفاده از AsQueryable‌ بی معنی هست یعنی از دو متد متفاوت استفاده کردیم!!!
در ضمن در Select‌ شما یک موجودیت News‌رو new کردین این کارو که همون select‌خالی انجام میده فقط پراپرتی های دیگری اگه موجود باشه رو null می کنه که ...

خانم شجاع نمی دونم پست منو می خونین یا نه من در هر دو حالت شما رو راهنمایی کردم. کمی دقت کنید!

zahrashoja
جمعه 13 مرداد 1391, 22:41 عصر
ببینید من می دونم شما می خواین چند ستون ( که بهتره بگین چند پراپرتی )رو نمایش بدین. این هم کاری نداره شما همه News‌ رو بر می گردونین و در DataGridView‌مشخص می کنید که چه پراپرتی هایی نمایش داده بشه!!!

من تازه چند روز پیش فهمیدم به آسونی میشه با کد ستونای گرید رو مخفی کرد .... ممنون
راستش من اصلن از این انواع سر در نمیارم




IQueryable
var


IEnumerable<>

IQueryable<>

List

IList<>
ولی فک کنم همون list کلن کارمو راه بندازه :|