با سلام
من در برنامم 2 جدول دارم به نام گروه (Groups) و مخاطبین (Contacts) که در جدول مخاطبین ID جدول گروه برای هر رکورد ثبت میشه
مشکل من اینجاس که میخام به جای شماره ID ، نام گروه (GroupName) از جدول گروه نشون داده بشه .
برنامه با AspCore3 نوشته شده . تشکر
جدول Work Group
public class WorkGroup
{
public int ID { get; set; }
[Display(Name ="نام گروه")]
[Required(AllowEmptyStrings =false,ErrorMessage ="{0} را وارد نمایید.")]
public string GroupName { get; set; }
[Display(Name = "دسترسی به زیر مجموعه")]
[Required(AllowEmptyStrings = false, ErrorMessage = "وضعیت {0} را مشخص نمایید .")]
public bool AccessSubgroups { get; set; }
[Display(Name = "توضیحات")]
public string Description { get; set; }
public string UserID { get; set; }
[ForeignKey(nameof(UserID))]
public virtual ApplicationUsers Users { get; set; }
}
جدول Contacts
public class Contacts
{
public int ID { get; set; }
[Display(Name = "نام")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمایید .")]
public string Name { get; set; }
[Display(Name = "نام خانوادگی")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمایید .")]
public string Family { get; set; }
[Display(Name = "شماره همراه")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمایید .")]
public string Phone { get; set; }
[Display(Name = "نام گروه")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمایید .")]
public int GroupName { get; set; }
[Display(Name = "موقعیت تعاونی")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمایید .")]
public int CooperativeLocation { get; set; }
[Display(Name = "نوع تعاونی")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمایید .")]
public int CooperativeType { get; set; }
[Display(Name = "وضعیت تعاونی")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمایید .")]
public int CooperativeCondition { get; set; }
public ICollection<WorkGroup> WorkGroups { get; set; }
}
بهتر بود فیلدهای جداول رو هم قرار میدادید.
میخواید توسط دستورات EF این کار رو انجام بدید ؟
با سلام
بهتر هست که جداول خودتون رو هم نمایش میدادید. چون ممکنه نیاز باشه که ViewModel تعریف بشه برای جوین کردن جداول در Entity Framework
توی جدول مخاطبین یا Contact شما گفتید ID گروه برای هر رکورد ثبت میشه
اما هیچ فیلدی نمیبینم برای نگهداری ID گروه. در واقع ID گروه باید در جدول مخاطبین به صورت کلید خارجی تعریف شده باشه.
نکته بعدی اینکه در جدول مخاطبین یک فیلد به نام ID تعریف کردید که احتمالا کلید اصلی شما هست ولی ویژگی Key رو بهش ندادید.
اما اگر فرض کنیم شما یک فیلد در جدول Contact به نام WorkGroupID تعریف کنید که کلید خارجی باشه، می تونید کار زیر رو انجام بدید.
1 - یک ViewModel به نام myViewModel بسازید
public class myViewModel
{
public int WorkGroupID { get; set; }
public int ContactID { get; set; }
public string ContactName { get; set; }
public string GroupName { get; set; }
}
در ویومدل بالا ما 4 فیلد رو تعریف کردیم که میتونیم در ادامه این 4 فیلد رو دریافت کنیم و توی خروجی نمایش بدیم. (فیلد ContactName همون نام مخاطب هست و فیلد GroupName هم نام گروه)
حالا می تونید یک کوئری بنویسید که 2 جدول Contact و WorkGroup رو توی اون Join کنید و خروجی مورد نظر رو نمایش بدید
public List<myViewModel> ContactList()
{
var ContactListquesr = (from c in _context.ContactTbl
join
w in _context.WorkGroupTbl on c.WorkGroupID equals w.Id
select new myViewModel()
{
WorkGroupID = w.Id,
ContactID = c.Id,
ContactName = c.Name,
GroupName = w.groupName
});
return ContactListquesr.ToList();
}
بعد از اجرا دستور بالا شما مقدار GroupName یا همون نام گروه رو در فراخوانی تابع ContactList دارید.
اگر هر مخاطب یک گروه میتونه داشته باشه باید جدول به نظر من به این صورت بشه..
public class Contacts
{
public int ID { get; set; }
[Display(Name = "نام")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمائید .")]
public string Name { get; set; }
[Display(Name = "نام خانوادگی")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمائید .")]
public string Family { get; set; }
[Display(Name = "شماره همراه")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمائید .")]
public string Phone { get; set; }
[Display(Name = "نام گروه")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمائید .")]
public int GroupID { get; set; }
[Display(Name = "موقعیت تعاونی")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمائید .")]
public int CooperativeLocation { get; set; }
[Display(Name = "نوع تعاونی")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمائید .")]
public int CooperativeType { get; set; }
[Display(Name = "وضعیت تعاونی")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} را وارد نمائید .")]
public int CooperativeCondition { get; set; }
[ForeignKey("GroupID ")]
public WorkGroup WorkGroups { get; set; }
}
بعد هنگام فراخوانی به صورت زیر عمل میکنیم:
var c=_context.Contacts.Include(x=>x.WorkGroups).tolist()
بعد برای نمایش به صورت زیر GroupName را فراخوانی کنید:
c.WorkGroups.GroupName
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
84
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1035
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
438
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1358
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4803
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
219
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
118
- پاسخ :
0
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
398
- پاسخ :
2
|
تاریخ :
1403/06/25
- ساعت :
11:39:00 PM
- بازدید :
571
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2015
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
84
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1035
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
438
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
931
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1358
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4803
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1161
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
599
- پاسخ :
1
|