PDA

View Full Version : مبتدی: بازیابی نام یک فیلد از روی parentid



baran girl
شنبه 26 مرداد 1398, 15:11 عصر
با سلام
من یک جدول دارم که سه فیلد داره ID , Name , ParentID که من می خوام به جای Parent ID مقدار Name فیلدی که ID اون برابر ParentID هست برگرده .از entity هم اطلاعات خونده میشن
خواهش میکنم کسی بلده راهنماییم کنه

baran girl
شنبه 26 مرداد 1398, 19:59 عصر
دوستان خاهش میکنم کمک کنید خیلی سرچ زدم به جواب نرسیدم

مهدی کرامتی
سه شنبه 29 مرداد 1398, 20:30 عصر
با سلام
من یک جدول دارم که سه فیلد داره ID , Name , ParentID که من می خوام به جای Parent ID مقدار Name فیلدی که ID اون برابر ParentID هست برگرده .از entity هم اطلاعات خونده میشن
خواهش میکنم کسی بلده راهنماییم کنه

لطفا کمی دقیق تر شرح دهید، دقیقا متوجه منظورتون نشدم.

baran girl
چهارشنبه 30 مرداد 1398, 20:51 عصر
با سلام و تشکر

من یه جدول بیمه دارم که شامل فیلد ID , Name , ParentID میشه اگر ParentID صفر باشه میشه نوع بیمه پایه بعد ایدی نوع بیمه پایه میشه میشه ParentID صندوق بیمه پایه یعنی والدش هست

مشکلم این هست که واسه نمایش چطور توی جدول بگم نام این ParentID را برگردون

var model = new InsuranceViewModel();
model.Insurances = blInsurance.Where(p => p.ParentId == 0).ToList();
return View(model);

150620

baran girl
پنج شنبه 31 مرداد 1398, 00:49 صبح
دوستان کسی نبود راهنمایی کنه

ali_md110
پنج شنبه 31 مرداد 1398, 10:30 صبح
این فیلد ParentId اشاره به جدولی دیگر دارد یا خیر؟ و فقط فیلدی حاوی یک عدد هست
یا بصورت Self Referencing هست؟
منظورم اینه که خود جدول با خودش رابطه داشته باشد

baran girl
پنج شنبه 31 مرداد 1398, 11:53 صبح
سلام ممنون از پاسخگوییتون
خیر ParentId و id توی یه جدول هستن تصور کنید مـثلا یه بیمه پایه با نام بیمه ازاد با ParentId=0 و id=1 درون جدول ثبت میشه بعد زیر شاخه های بیمه ازاد ParentId=1 میشود یعنی id بیمه ازاد

ali_md110
پنج شنبه 31 مرداد 1398, 12:18 عصر
شما ساختار Self Referencing را دارید ولی با کمی اشتباه پیاده سازی کردید
اگر فیلد navigation property را ساخته باشید به راحتی میتونید به خواستتون برسید
لطفا ساختار مدل رو هم ارسال کنید

مدلتون را اینجوری پیاده سازی کنید


public class Insurance
{
public int Id { get; set; }
public string Name{ get; set; }

[ForeignKey("ParentId")]
public Insurance Parent { get; set; }
public int? ParentId { get; set; }
public ICollection<Insurance> Childs { get; set; }

}

برای بازیابی هم از طریق


var s = blInsurance.Select(x => new
{
Id=x.Id,
Sandogh_Name = x.Name,
No_Bime_Payeh = x.Parent.Name
}).ToList();

استفاده کنید
میتونید از ویومدل هم استفاده کنید

baran girl
پنج شنبه 31 مرداد 1398, 15:15 عصر
ممنونم ازتون که وقت گذاشتین... خیلی خیلی لطف کردین

public class InsuranceMetaData
{
[ScaffoldColumn(false)]
[Bindable(false)]
public int Id { get; set; }

[DisplayName("نوع بیمه پایه")]
[Display(Name = "نوع بیمه پایه")]
[Required(ErrorMessage = "لطفا نوع بیمه پایه را وارد کنید", AllowEmptyStrings = false)]
[StringLength(50, ErrorMessage = "این فیلد باید حداکثر 50 کاراکتر باشد")]
public string Name { get; set; }

[ScaffoldColumn(false)]
[DisplayName("صندوق بیمه پایه")]
[Display(Name = "صندوق بیمه پایه")]
[Required(ErrorMessage = "لطفا صندوق بیمه پایه را وارد کنید", AllowEmptyStrings = false)]
public int ParentId { get; set; }
}

این مدلم هست.. از ویو مدلم استفاده کردم چون کنار همین لیست درجش هم قرار دادم

public class InsuranceViewModel
{
public IEnumerable<Medical_Science.Models.DomainModels.Insurance> Insurances { get; set; }
public IEnumerable<Medical_Science.Models.DomainModels.Insurance> InsurancesKind { get; set; }
public IEnumerable<Medical_Science.Models.DomainModels.Insurance> InsurancesKinds { get; set; }
public Medical_Science.Models.DomainModels.Insurance Insurance { get; set; }

}


اینم کد ویو مدلم

ali_md110
پنج شنبه 31 مرداد 1398, 15:46 عصر
هنوز متوجه نشدید؟مشکل حل شد یا خیر؟

منظورم از ویومدل این بود که بجای برگردادندن یک لیست از نوع بی نام مانند مثال قبلی من


var s = blInsurance.Select(x => new

{

Id=x.Id,

Sandogh_Name = x.Name,

No_Bime_Payeh = x.Parent.Name
}).ToList();





از یک ویومدل برای واکشی استفاده کنیم و لیستی از نوع تعریف شده داشته باشیم
مثل :


var s = blInsurance.Select(x => new myViewModel

{

Id=x.Id,

Sandogh_Name = x.Name,

No_Bime_Payeh = x.Parent.Name
}).ToList();

baran girl
پنج شنبه 31 مرداد 1398, 15:58 عصر
نه هنوز مشکلم برطرف نشده خالی برمیگردونه .... الان موقع درج فیلد parent باچی پر بشه

baran girl
پنج شنبه 31 مرداد 1398, 16:03 عصر
معذرت میخوام بعد این لیست را چطوری توی ویو مدل تعریف کنم؟

ali_md110
پنج شنبه 31 مرداد 1398, 16:37 عصر
خیلی سخت نیست شما درکتون از ویو مدل کامل نیست
منظورم از مدل کلاسهای معادل بانک برنامه شماست


public class Insurance

{
public int Id { get; set; }
public string Name{ get; set; }

[ForeignKey("ParentId")]
public Insurance Parent { get; set; }
public int? ParentId { get; set; }
public ICollection<Insurance> Childs { get; set; }

}




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

مثال:


var db=new myDbContext();
db.Insurance.Tolist();

ما معمولا در هنگام واکشی به تمام فیلدهای یک مدل نیاز نداریم و ممکنه از تمام فیلدهای یک جدول مثلا به دو یا 3 فیلد نیاز نداشته باشیم
برای جلوگیری از لود تمام فیلدها از ویومدل استفاده میکنیم
پس یک کلاس فرضی میسازیم جهت عمل پروجکشن بنام InsurVM


public class InsurVM
{
public int Id { get; set; }
public string Name{ get; set; }
public string ParentName{ get; set; }
}


شما یک ویومدل دیگر دارید :



public class InsuranceViewModel
{
public IEnumerable<Medical_Science.Models.DomainModels.In surance> Insurances { get; set; }
public IEnumerable<Medical_Science.Models.DomainModels.In surance> InsurancesKind { get; set; }
public IEnumerable<Medical_Science.Models.DomainModels.In surance> InsurancesKinds { get; set; }

public IEnumerable<InsurVM> Insurs { get; set; }

public Medical_Science.Models.DomainModels.Insurance Insurance { get; set; }

}


کافی هست یک لیست دیگر از نوع InsurVM هم بهش اضافه کنید : خط بولد شده دقت کنید
اکنون کافیست است بصئرت زیر عمل کنید
در اینجا فقط کافیه در قسمت کنترولر یا بخش سرویس دهس بصورت زیر عمل کنیم


var s = blInsurance.Select(x => new InsurVM
{
Id=x.Id,
Sandogh_Name = x.Name,
No_Bime_Payeh = x.Parent.Name
}).ToList();
var m= new InsuranceViewModel();
m.Insurs =s;

ali_md110
پنج شنبه 31 مرداد 1398, 16:38 عصر
خیلی سخت نیست شما درکتون از ویو مدل کامل نیست
منظورم از مدل کلاسهای معادل بانک برنامه شماست


public class Insurance


{
public int Id { get; set; }
public string Name{ get; set; }

[ForeignKey("ParentId")]
public Insurance Parent { get; set; }
public int? ParentId { get; set; }
public ICollection<Insurance> Childs { get; set; }

}




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

مثال:


var db=new myDbContext();
db.Insurance.Tolist();>

ما معمولا در هنگام واکشی به تمام فیلدهای یک مدل نیاز نداریم و ممکنه از تمام فیلدهای یک جدول مثلا به دو یا 3 فیلد نیاز نداشته باشیم
برای جلوگیری از لود تمام فیلدها از ویومدل استفاده میکنیم
پس یک کلاس فرضی میسازیم جهت عمل پروجکشن بنام InsurVM


public class Insurance


{
public int Id { get; set; }
public string Name{ get; set; }

public string ParentName{ get; set; }

}





شما یک ویومدل دیگر دارید :


public class InsuranceViewModel
{


public IEnumerable<InsurVM> Insurs { get; set; }


}





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


var s = blInsurance.Select(x => new InsurVM
{
Id=x.Id,
Name = x.Name,

ParentName = x.Parent.Name

}).ToList();
var m= new InsuranceViewModel();

m.Insurs =s;

baran girl
جمعه 01 شهریور 1398, 12:24 عصر
ممنونم از پاسخگوییتون ....خیلی خیلی لطف کردین