PDA

View Full Version : ایجاد حلقه روی مدل و جدا کردن ایتم



Helpco
چهارشنبه 07 شهریور 1397, 09:43 صبح
سلام من یک کلاس مدل دارم به این صورت



public class Promise
{
[Key]
public Guid Mobayee_id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
public string Field4 { get; set; }
public string Field5 { get; set; }
public string Field6 { get; set; }
public string Field7 { get; set; }
}




هر کدوم از این فیلد ها دارای مقدار مه با مارکتر ' ,' مثل (علی, محمد, رضا) که درField1 ذخیره شده
حلا مخوام با یک دستور این مقادیر جداد جدا کنم و داخل گرید نشون بدم
یعنی محتویات فیلدField1 بشه سه ستون در گرید بهمین شکل تا Field7 مکن این فیلد ها به 50 تا هم بشه

ali_md110
چهارشنبه 07 شهریور 1397, 13:21 عصر
هدفتون از این طراحی عجیب چی هست؟
در این مدل چند ردیف رکورد قرار میگیره؟
اگر فقط یک رکورد داشته باشید قضیه حله
ابتدا رکورد همه فیلده را در یک متغیر بنام a بریزید



var a=list.Select(x=> new {all=x.Field1+x.Field2+....الی اخرین فیلد})
و رکوردهای بدست آمد همه ی این 7 فیلد
= "ali,reza,jafar,hoseyn,......";

string[] arr = a.Split(',');
foreach(var cha in arr)
{
Console.WriteLine(cha);
}


ولی
اگر فرض کنید 3 رکورد باشه :

Field1 در رکورد اول شامل علی حسن و حسین باشه
و در رکورد دوم باز فیلد Field1 اینبار رضا, حسن و حسین و محمد باشده
و رکورد سوم فیلد Field1 دارای 5 اسم باشه انوقت جمعا میشه 12 ستون
حالا فرض کنید این Filed 6 باقیمانده هم هرکدام 3 رکورد داشته باشه اونوقت نیاز به حلقه تو در تو هست و باز قابل حله ولی این که میشه مصیبت:گریه: با تعداد زیادی فیلد در گراید

unique2017
چهارشنبه 07 شهریور 1397, 13:32 عصر
با تشکر از پاسخگوییتون

Helpco
چهارشنبه 07 شهریور 1397, 14:11 عصر
هدفتون از این طراحی عجیب چی هست؟
در این مدل چند ردیف رکورد قرار میگیره؟
اگر فقط یک رکورد داشته باشید قضیه حله
ابتدا رکورد همه فیلده را در یک متغیر بنام a بریزید



var a=list.Select(x=> new {all=x.Field1+x.Field2+....الی اخرین فیلد})
و رکوردهای بدست آمد همه ی این 7 فیلد
= "ali,reza,jafar,hoseyn,......";

string[] arr = a.Split(',');
foreach(var cha in arr)
{
Console.WriteLine(cha);
}


ولی
اگر فرض کنید 3 رکورد باشه :

Field1 در رکورد اول شامل علی حسن و حسین باشه
و در رکورد دوم باز فیلد Field1 اینبار رضا, حسن و حسین و محمد باشده
و رکورد سوم فیلد Field1 دارای 5 اسم باشه انوقت جمعا میشه 12 ستون
حالا فرض کنید این Filed 6 باقیمانده هم هرکدام 3 رکورد داشته باشه اونوقت نیاز به حلقه تو در تو هست و باز قابل حله ولی این که میشه مصیبت:گریه: با تعداد زیادی فیلد در گراید



تعداد ذخیره داخل هر فیلد مشخص و بیشتر از 3 عدد نمی باشد
یعنی تعداد فیلد
Field1 3عدد می باشد فیلد Field2 یک عدد و فیلد Field3 دوباره 3 عدد به همین ترتیب الی اخر

Helpco
چهارشنبه 07 شهریور 1397, 14:14 عصر
داخل یک دیتا تیبل هم بشه انتقال داد مشکل حل میکنه برام چون مخوام بفرستم سمت استمول جهت چاپ

Helpco
چهارشنبه 07 شهریور 1397, 14:20 عصر
هدفتون از این طراحی عجیب چی هست؟
در این مدل چند ردیف رکورد قرار میگیره؟
اگر فقط یک رکورد داشته باشید قضیه حله
ابتدا رکورد همه فیلده را در یک متغیر بنام a بریزید



var a=list.Select(x=> new {all=x.Field1+x.Field2+....الی اخرین فیلد})
و رکوردهای بدست آمد همه ی این 7 فیلد
= "ali,reza,jafar,hoseyn,......";

string[] arr = a.Split(',');
foreach(var cha in arr)
{
Console.WriteLine(cha);
}


ولی
اگر فرض کنید 3 رکورد باشه :

Field1 در رکورد اول شامل علی حسن و حسین باشه
و در رکورد دوم باز فیلد Field1 اینبار رضا, حسن و حسین و محمد باشده
و رکورد سوم فیلد Field1 دارای 5 اسم باشه انوقت جمعا میشه 12 ستون
حالا فرض کنید این Filed 6 باقیمانده هم هرکدام 3 رکورد داشته باشه اونوقت نیاز به حلقه تو در تو هست و باز قابل حله ولی این که میشه مصیبت:گریه: با تعداد زیادی فیلد در گراید

بعدممکن شامل چمد ردیف باشم ولی قانون ذخیره هم ردیف ها یکی می باشد
ممکن 10 ردیف دشت باشیم که از دیتا بس خونده میشه
میشه کاریش کرد؟

Helpco
شنبه 10 شهریور 1397, 07:49 صبح
up.....up....

Mahmoud.Afrad
شنبه 10 شهریور 1397, 08:09 صبح
یک مثال از نمونه داده های دیتابیس و کوئری که اجرا میکنید همراه نتیجه اش بزارید.

Helpco
شنبه 10 شهریور 1397, 09:23 صبح
یک مثال از نمونه داده های دیتابیس و کوئری که اجرا میکنید همراه نتیجه اش بزارید.

اطلاعات داخل دیتابیس اینطوری ذخیره میشه

148791
وبا linqبا این دستور فراخوانی میشه



var sebdd2 = db.Promises.Where(x => x.MelkFor.MelkID == _MelkID).FirstOrDefault().id;

Mahmoud.Afrad
شنبه 10 شهریور 1397, 16:08 عصر
تعداد فیلدها ثابت هست یا نه؟ چرا چنین ساختاری برای ذخیره انتخاب کردید؟ تعداد مقادیر درون هر فیلد 3 تا بیشتر نمیشه؟

Helpco
یک شنبه 11 شهریور 1397, 07:39 صبح
تعداد فیلدها ثابت هست یا نه؟ چرا چنین ساختاری برای ذخیره انتخاب کردید؟ تعداد مقادیر درون هر فیلد 3 تا بیشتر نمیشه؟

بله تعداد فیلد ها ثابت هست و مقدار درون هر فیلد هم نهایت 3 عدد و بیشتر نمیشه که ممکن کمتر بشه مثلا2 عدد یا 1 حتی
این یک برنامه جانبی و کمک برنامه اصلی که این شرکت دراه و من قرار برنامه جانبی بنویسم براشون
میشه کاریش کرد؟

ژیار رحیمی
یک شنبه 11 شهریور 1397, 09:00 صبح
سلام
بهتره به تعداد لازم پراپرتی ReadOnly به مدل اضافه کنی کارت راحت میشه.

public class Promise
{
[Key]
public Guid Mobayee_id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
public string Field4 { get; set; }
public string Field5 { get; set; }
public string Field6 { get; set; }
public string Field7 { get; set; }


public string Field11 { get{return Field1.Split({','}).Length==1?Field1.Split({','})[0]:null;} }
public string Field12 { get{return Field1.Split({','}).Length==2?Field1.Split({','})[1]:null;} }
public string Field13 { get{return Field1.Split({','}).Length==3?Field1.Split({','})[2]:null;} }


public string Field71 { get{return Field7.Split({','}).Length==1?Field7.Split({','})[0]:null;} }
public string Field72 { get{return Field7.Split({','}).Length==2?Field7.Split({','})[1]:null;} }
public string Field73 { get{return Field7.Split({','}).Length==3?Field7.Split({','})[2]:null;} }




}

به ازای هر فیلد دوبار متد Split فراخوانی میشود که بهنه نیست خودت بهینه ش کن.فقط یه نمونه مثال جهت انجام کار هست و Field11 یعنی قسمت اول عمل Split فیلد Field1 و..

Helpco
یک شنبه 11 شهریور 1397, 09:11 صبح
سلام
بهتره به تعداد لازم پراپرتی ReadOnly به مدل اضافه کنی کارت راحت میشه.

public class Promise
{
[Key]
public Guid Mobayee_id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
public string Field4 { get; set; }
public string Field5 { get; set; }
public string Field6 { get; set; }
public string Field7 { get; set; }


public string Field11 { get{return Field1.Split({','}).Length==1?Field1.Split({','})[0]:null;} }
public string Field12 { get{return Field1.Split({','}).Length==2?Field1.Split({','})[1]:null;} }
public string Field13 { get{return Field1.Split({','}).Length==3?Field1.Split({','})[2]:null;} }


public string Field71 { get{return Field7.Split({','}).Length==1?Field7.Split({','})[0]:null;} }
public string Field72 { get{return Field7.Split({','}).Length==2?Field7.Split({','})[1]:null;} }
public string Field73 { get{return Field7.Split({','}).Length==3?Field7.Split({','})[2]:null;} }




}

به ازای هر فیلد دوبار متد Split فراخوانی میشود که بهنه نیست خودت بهینه ش کن.فقط یه نمونه مثال جهت انجام کار هست و Field11 یعنی قسمت اول عمل Split فیلد Field1 و..


ممکن بیشتر توضیح بدید متوجه نشدم

ژیار رحیمی
یک شنبه 11 شهریور 1397, 09:17 صبح
برای هر بخش از رشته درون Filed1 سه Property اضافه شده (این Property ها ReadOnly هستند یعنی تو دیتابیس Map نمیشن فقط جهت دسترسی به بخشهای رشته درون Fileld1 استفاده میشوند)
چون شما بیان کردی تعداد فیلد ها محدود به 3 تا بیشتر نیست این روش جواب میده
البته بدون Property اضافه داخل مدل هم میتونی Field1 را موقع کویری به سه ستون تبدیل کنی

context.Promises.Select(c=>new{Field11=c.Field1.Split({','})[0], Field12=c.Field1.Split({','})[1],Field13=c.Field1.Split({','})[2],.... });

Helpco
یک شنبه 11 شهریور 1397, 09:24 صبح
برای هر بخش از رشته درون Filed1 سه Property اضافه شده (این Property ها ReadOnly هستند یعنی تو دیتابیس Map نمیشن فقط جهت دسترسی به بخشهای رشته درون Fileld1 استفاده میشوند)
چون شما بیان کردی تعداد فیلد ها محدود به 3 تا بیشتر نیست این روش جواب میده

یعنی یک مدل دیگه تعرف کنم بعنوان ویو که این مدل داخل اون
Split کنم و هرجا خواستم حلا از اون مدل جدید استفائه کنم درست متوجه شدم؟

148803

ژیار رحیمی
یک شنبه 11 شهریور 1397, 09:27 صبح
نه متوجه نشدی .همان مدل Promise چند تا Property اضافه شده مدل دیگه ای لازم ندارد.

Helpco
یک شنبه 11 شهریور 1397, 09:32 صبح
نه متوجه نشدی .همان مدل Promise چند تا Property اضافه شده مدل دیگه ای لازم ندارد.

انجام دادم ولی خطای که داخل عکس میده

Helpco
یک شنبه 11 شهریور 1397, 10:13 صبح
برای هر بخش از رشته درون Filed1 سه Property اضافه شده (این Property ها ReadOnly هستند یعنی تو دیتابیس Map نمیشن فقط جهت دسترسی به بخشهای رشته درون Fileld1 استفاده میشوند)
چون شما بیان کردی تعداد فیلد ها محدود به 3 تا بیشتر نیست این روش جواب میده
البته بدون Property اضافه داخل مدل هم میتونی Field1 را موقع کویری به سه ستون تبدیل کنی

context.Promises.Select(c=>new{Field11=c.Field1.Split({','})[0], Field12=c.Field1.Split({','})[1],Field13=c.Field1.Split({','})[2],.... });


این روش حل شد ممنون