PDA

View Full Version : مشکل در foreach



jaykob
دوشنبه 27 تیر 1390, 12:51 عصر
سلام دوستان

من با استفاده از یک کوئری ساده linq می آم یک فیلد به نام subject رو نشون می دم با دستور foreach . اما مشکل من اینجاست که داخل اون جدول می خوام به فیلد id هم دسترسی داشته باشم و در foerach بتونم هر موضوعی را با id خودش چاپ کنم .

در کد زیر داخل متغییر link می خوام مقدار id موضوع باشه .




if (!Page.IsPostBack)
{
DataClasses1DataContext db = new DataClasses1DataContext();
var query = from subject in db.tbl_news orderby subject.id descending select subject.subject;
Literal1.Text = string.Empty;
StringBuilder createlist = new StringBuilder();
foreach (var item in query)
{

createlist.Append( "<div >");
createlist.Append("<a href='" + link + "'>" + item + "</a>" + "</br>");
createlist.Append("</div>");
}

if (!string.IsNullOrEmpty(createlist.ToString()))
Literal1.Text = createlist.ToString();
}



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

raziee
دوشنبه 27 تیر 1390, 13:23 عصر
با سلام.
برای این کار باید در زمان Select هر Property که نیاز داری رو بگیری. به عنوان مثال یک کلاس جدید به صورت زیر تعریف کنید:
public class MyQuery
{
public int Id { get; set; }
public string Subject { get; set; }
}

حالا Select جدیدی بساز:
var myQueries = context.News.Select(x => new MyQuery() { Id = x.Id, Subject = x.Email }).ToList();
myQueries.ForEach(x => AddLink(x));

تابع AddLink :
private void AddLink(MyQuery query)
{
createlist.AppendLine(string.Format("<a href=\"{0}\">{1}</a></br>", query.Id, query.Subject));
}

توجه داشته باش که میتونی یک تابع جدا برای اینکار ننویسی و به صورت زیر کار کنی:
myQueries.ForEach(x =>
{
createlist.AppendLine(string.Format("<a href=\"{0}\">{1}</a></br>", x.Id, x.Subject));
});

jaykob
دوشنبه 27 تیر 1390, 13:52 عصر
سلام

ممنون از راهنماییتون فقط من در کوئری خودم فیلد هارو به صورت descending مرتب کرده بودم بر اساس id در این کوئری شما order by رو ندیدم . و اینکه می خواستم 10 فیلد آخر نمایش داده بشوند ممنون می شم راهنمایی کنید .

raziee
دوشنبه 27 تیر 1390, 14:22 عصر
سلام

ممنون از راهنماییتون فقط من در کوئری خودم فیلد هارو به صورت descending مرتب کرده بودم بر اساس id در این کوئری شما order by رو ندیدم . و اینکه می خواستم 10 فیلد آخر نمایش داده بشوند ممنون می شم راهنمایی کنید .

از اون سوال ها بود که نباید میپرسیدی :دی
اون کوئری که من نوشتم Sample بود هر جوری که دوست داری کوئریت رو بنویس. محدود نیستی.
var myQueries = context.News.OrderByDescending(x=>x.Id).Take(10).Select(x => new MyQuery() { Id = x.Id, Subject = x.Subject }).ToList();

Hossein.Dsh
دوشنبه 27 تیر 1390, 19:24 عصر
با تشکر از آقای رضیئی که خیلی خوب توضیح دادن

دوست عزیر اگر میخوای مشکلت سریع حل بشه فقط کافیه در خط آخر کوئریت به جای select subject.subject بنویسی:

select new
{
subject.subject, subject.id
}.Take(10)



هر فیلد دیگه ای هم که میخوای بهش اظافه کن