با سلام
من یک جدول دارم که سه فیلد داره ID , Name , ParentID که من می خوام به جای Parent ID مقدار Name فیلدی که ID اون برابر ParentID هست برگرده .از entity هم اطلاعات خونده میشن
خواهش میکنم کسی بلده راهنماییم کنه
با سلام
من یک جدول دارم که سه فیلد داره ID , Name , ParentID که من می خوام به جای Parent ID مقدار Name فیلدی که ID اون برابر ParentID هست برگرده .از entity هم اطلاعات خونده میشن
خواهش میکنم کسی بلده راهنماییم کنه
دوستان خاهش میکنم کمک کنید خیلی سرچ زدم به جواب نرسیدم
با سلام و تشکر
من یه جدول بیمه دارم که شامل فیلد ID , Name , ParentID میشه اگر ParentID صفر باشه میشه نوع بیمه پایه بعد ایدی نوع بیمه پایه میشه میشه ParentID صندوق بیمه پایه یعنی والدش هست
مشکلم این هست که واسه نمایش چطور توی جدول بگم نام این ParentID را برگردون
var model = new InsuranceViewModel();
model.Insurances = blInsurance.Where(p => p.ParentId == 0).ToList();
return View(model);
Untitled.png
دوستان کسی نبود راهنمایی کنه
این فیلد ParentId اشاره به جدولی دیگر دارد یا خیر؟ و فقط فیلدی حاوی یک عدد هست
یا بصورت Self Referencing هست؟
منظورم اینه که خود جدول با خودش رابطه داشته باشد
سلام ممنون از پاسخگوییتون
خیر ParentId و id توی یه جدول هستن تصور کنید مـثلا یه بیمه پایه با نام بیمه ازاد با ParentId=0 و id=1 درون جدول ثبت میشه بعد زیر شاخه های بیمه ازاد ParentId=1 میشود یعنی id بیمه ازاد
شما ساختار 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();
استفاده کنید
میتونید از ویومدل هم استفاده کنید
ممنونم ازتون که وقت گذاشتین... خیلی خیلی لطف کردین
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.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 Medical_Science.Models.DomainModels.Insurance Insurance { get; set; }
}
اینم کد ویو مدلم
هنوز متوجه نشدید؟مشکل حل شد یا خیر؟
منظورم از ویومدل این بود که بجای برگردادندن یک لیست از نوع بی نام مانند مثال قبلی من
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();
نه هنوز مشکلم برطرف نشده خالی برمیگردونه .... الان موقع درج فیلد parent باچی پر بشه
معذرت میخوام بعد این لیست را چطوری توی ویو مدل تعریف کنم؟
خیلی سخت نیست شما درکتون از ویو مدل کامل نیست
منظورم از مدل کلاسهای معادل بانک برنامه شماست
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;
خیلی سخت نیست شما درکتون از ویو مدل کامل نیست
منظورم از مدل کلاسهای معادل بانک برنامه شماست
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;
آخرین ویرایش به وسیله ali_md110 : پنج شنبه 31 مرداد 1398 در 15:48 عصر
ممنونم از پاسخگوییتون ....خیلی خیلی لطف کردین