PDA

View Full Version : سوال: Update در Linq



hadi_ganji
شنبه 25 دی 1389, 19:50 عصر
با سلام خدمت همه دوستان
من تازه Linq رو شروع كردم و واسه update كردن ركوردها مشكل دارم
ميخواهم يك فيلد از يك جدول كه تعداد ركورد بالا دارد رو آپديت كنم ولي نميخوام تك تك اون ركوردها رو از ديتابيس fetch كنم و آپديت مورد نظر رو روش اعمال كنم ممنون ميشم اگه روش آپديت يكجا تعداد ركورد بالا رو بدون fetch كردن از ديتابيس رو بهم بگين
با تشكر

hamidreza20
دوشنبه 27 دی 1389, 08:24 صبح
سلام دوست عزیز
برای UPDATE و DELETE کردن در دیتا بیس حتما باید یه کوئری را انجام دهید تا معلوم شود نتیجه باید روی کدام رکورد اعمال شود .
در LINQ to SQL و LINQ to Entity نیز شما باید همین کار را انجام دهید . ولی هنگامی که دارید یه کوئری را اجرا می کنید باید از عملگر Single در اآخر کوئری استفاده کنید تا نتیجه اجرای صرفا روی یک رکورد اعمال شود...

hadi_ganji
دوشنبه 27 دی 1389, 08:58 صبح
سلام دوست عزیز
برای UPDATE و DELETE کردن در دیتا بیس حتما باید یه کوئری را انجام دهید تا معلوم شود نتیجه باید روی کدام رکورد اعمال شود .
در LINQ to SQL و LINQ to Entity نیز شما باید همین کار را انجام دهید . ولی هنگامی که دارید یه کوئری را اجرا می کنید باید از عملگر Single در اآخر کوئری استفاده کنید تا نتیجه اجرای صرفا روی یک رکورد اعمال شود...

سلام مرسي از اينكه جواب دادين
من ميخوام يك ميليون ركورد رو آپديت كنم
مثلا جدول من سه ميليون ركورد دارد من ميخوام با Linq تعداد ركورد بالايي را يكجا آپديت كنم
همانطور كه ميدونيد ميشه يه كوئري گرفت و با for each فيلد هاي مورد نظر را تغيير داد در نهايت اعمال نمود ولي اين دستور بسيار زمان بر است
حالا چه بايد كرد ؟
ممنون ميشم كمكم كنيد

hamidreza20
دوشنبه 27 دی 1389, 09:33 صبح
var query = from q in bank.Persons where q.ID == id select q;

query.Fname = txtFname_Edit.Text.Trim();
query.Lname = txtLname_Edit.Text.Trim();
query.Job = txtJob_Edit.Text.Trim();

bank.SubmitChanges();




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

hadi_ganji
دوشنبه 27 دی 1389, 19:44 عصر
var query = from q in bank.Persons where q.ID == id select q;

query.Fname = txtFname_Edit.Text.Trim();
query.Lname = txtLname_Edit.Text.Trim();
query.Job = txtJob_Edit.Text.Trim();

bank.SubmitChanges();

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




از اينكه جواب دادين تشكر ميكنم ولي فكر كنم قطعه كد بالا عمل نكنه چون متغير query يه مجموعه اي از جدول Person رو شامل ميشه و نميشه به فيلد مثلا fname دسترسي داشت خودم روش زير رو بلدم كه تا ركوردهايي در حدود هزار بد نيس ولي هر چه ركورد بيشتر ميشه اينم بيشتر طول ميكشه تا حدي كه به جايي ميرسه كه دگه قابل تحمل نيس ميخواستم بدونم روش ديگه اي غير از اين كه من در زير نوشتم نيست كه به مانند دستورات Sql يك جدول رو به صورت يكجا آپديت كنه؟


Dim querytbl_tests = From tbl_tests In db.tbl_tests _
Where tbl_tests.t_code = 1 _
Select tbl_tests

For Each tbl_tests As tbl_test In querytbl_tests
tbl_tests.t_name = "a"
Next
db.SubmitChanges

ممنون ميشم اگه كمكم كنين

rascal1364
سه شنبه 26 بهمن 1389, 16:16 عصر
سلام بی ادبی نباشه ولی چرا چیزی رو که امتحان نکردید تحویل دیگران میدی عزیزم این جور آپدیت کردن پیغام خطا صادر میکنه چون اصلا نمیشه به فیلدهای رکورد دسترسی داشته باشی چون داخل متغییر مجموعه ای از رکوردها قرار داره نه یک رکورد

ehemitsme
یک شنبه 04 تیر 1391, 00:25 صبح
سلام
دوست عزیز مشکل شما با این کد حل میشه
من تست کردم و جواب گرفتم

Public Shared DB As New DataClasses1DataContext(StrConnection)


آپدیت:
DB.ExecuteCommand("UPDATE MyTable SET Temp = - 1, Allocate = 0 where ID_DAG=2

حذف:
DB.ExecuteCommand("TRUNCATE TABLE MyTable ")


کلا میتونید کوئری معمولی بنویسید توش

امیدوارم مشکلتون حل بشه

Sirwan Afifi
یک شنبه 04 تیر 1391, 13:31 عصر
LinqDataContext db = new LinqDataContext();
var query = (from p in db.Students
where p.stNo == 2
select p).FirstOrDefault();
query.stName = "Sirwan";
query.stFamily = "Afifi";

db.SubmitChanges();

Sirwan Afifi
یک شنبه 04 تیر 1391, 13:32 عصر
سلام بی ادبی نباشه ولی چرا چیزی رو که امتحان نکردید تحویل دیگران میدی عزیزم این جور آپدیت کردن پیغام خطا صادر میکنه چون اصلا نمیشه به فیلدهای رکورد دسترسی داشته باشی چون داخل متغییر مجموعه ای از رکوردها قرار داره نه یک رکورد

کد hamidreza20 مشکلی نداره دوست عزیز

mohamadz5
دوشنبه 05 تیر 1391, 09:18 صبح
اين تاپيك براي دو سال پيش هست دوستان !