PDA

View Full Version : مشکل در دریافت نتیجه از طریق Linq



ali_students
یک شنبه 06 فروردین 1396, 18:11 عصر
سلام خدمت دوستان

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

حالا اومدم یه متد نوشتم که بتونه تمام اطلاعات جدول مربوط به دانش آموزان رو در DatagridView نمایش بده.( خب این جواب داد و درست عمل کرد)

امااا مشکل اصلی ===>> اومدم یه متد دیگه درست کردم که بر اساس comboBox ایدی رو بگیره و به متد ارسال کنه و متد بیاد در query بر اساس اون آیدی اطلاعات رو select کنه و به یک آرایه پاس بده و من بتونم با استفاده از کلمه کلیدی ref در بخش پارامتر متد ، همون آرایه رو به بیرون منتقل کنم که مثلا در استفاده از حافظه بهینه عمل کرده باشم.( نخندینا بخدا تازه واردم :لبخند::لبخند::لبخند: )

خب حالا قصد دارم اطلاعاتی رو که از طریق آرایه به بیرون پاس داده میشه رو درون هرکدام از textBox های مرتبط با هر دیتا رو قرار بدم.( مثلا نام در textbox مربوط به خودش و نام خانوادگی هم در textbox مرتبط با خودش و .... ). و واقعا بلد نیستم. و خیلی گیج شدم. ممنون میشم راهنماییم کنید. کدهای متد رو هم براتون میذارم و اگه لطف کنید بگید کجای کارم مشکل داره ممنون میشم.



public void ViewDetails(int Id , ref string[] getStudent)
{

var query = (from a in Context.Students
where a.id == Id
select new { a.FirstName, a.LastName, a.DateBorn, a.CityBorn, a.StartTech, a.LevelLicense, a.QuestionTexts}).ToArray();


//------------ Loop For Add data into getStudent Array
for (int i = 0; i < getStudent.Length; i++)
{
for (int j = 0; j < query.Length; j++)
{
getStudent[i] = query[j].ToString();
}
}
}

En_MK
دوشنبه 07 فروردین 1396, 09:04 صبح
سلام
شما باید یک کلاس شامل فیلدهایی که مقادیرشو در select تون دارید بسازید
getStudent رو لیستی از اون کلاس بگیرید
وموقع set کردن مقادیر به تکس باکس ها فقط کافیه در حلقه for اینطور بنویسید


textBox.Text=getStudent[i].FirstName;




منظورم از کلاس یه چیزی مثل public class CustomerOrderResult در این مثال (https://www.codeproject.com/Articles/26657/Simple-LINQ-to-SQL-in-C)

codedeveloper
دوشنبه 07 فروردین 1396, 12:41 عصر
سلام دوست عزیز،
در مثالی که خودتون نوشتین وقتی که به آخر عبارت ToArray اضافه میکنید، خروجی رو به هر تعداد که باشه، به شکل آرایه میده بیرون، آرایه ای که هر کدام از خانه هاش شامل نوع خروجی تعربف شده شما در بخش select هست.
پس وقتی که شما میخوایین از این آرایه استفاده کنید، هر ایندکس آن شامل (a.FirstName, a.LastName, a.DateBorn, a.CityBorn, a.StartTech, a.LevelLicense, a.QuestionTexts) هست.
اما در مورد حلقه بعد از آن کاملا اشتباه هستش و من اصلا دلیل این کار شما رو نفهمیدم!!!!!!!!
اگر منظور شما برگرداندن بیش از یک رکورد با این روش هستش، پشنهاد میکنم از مفهوم listها استفاده کنید. که هم راحتر هست و هم اصولیتر و هم دستتون باهاش بازتره....!
اما در مثال بالا با توجه به سناریوی که خودتون تعرف کردین، چون آیدی طرف انتخاب شده و بر اساس اون جستجو میشه ، اگر ساختار دیتابیستون درست باشه، اصولا نباید بیش از یک رکورد برگردانه که برای اون هم یا آرایه ای به تعداد فیلد های که برمیگردانید در نظر به گیرید و با حلقه Foreach اطلاعات داخل "var query" رو خونده و به هر کدام از خانه های آرایه بدهید!!!! ولی باز هم اگه بخواهید اصولیتر پیش برین پیشنهاده بنده استفاده از کلاس هستش که برای اطلاعات دانش آموز طراحی بشه و خروجی عبارت رو با استفاده از کلاس به لایه بالاتر برگردونید...
انشاله که کمکتون بکنه...
موفق باشید...