من جدولی دارم شامل اطلاعات سند مانند شماره و تاریخ سند و یک جدول دیگر شامل آیتم های سند که از طریق Id به هم ارتباط دارند حالا چطور می توانم یک ویو ایجاد کنم و اطلاعات هر دو جدول را که یکی از آنها لیستی از رکوردها است را به کنترلر ارسال کنم.
اگر کدهای خودتون و ستون های جداول خودتون رو هم قرار می دادید بهتر می شد راهنمایی کرد اما با توجه به اطلاعات ارائه شده به صورت فرضی پاسخ میدم خدمتتون.
فرض کنید دو جدول به صورت زیر دارید که رابطه Parent و Child با هم دارن.
جدول Invoice یا فاکتور (Parent)
public class Invoice
{
[Key]
public int ID {get; set;}
public DateTime InvoiceDate {get; set;}
public long InvoicePrice {get; set;}
public int CustomerID {get; set;}
}
جدول InvoiceItem یا اقلام فاکتور (Child)
public class InvoiceItem
{
[Key]
public int ID {get; set;}
public int ProductID {get; set;}
public int ProductCount {get; set;}
public int InvoiceID {get; set;}
[ForignKey("InvoiceID")]
public virtual Invoice Invoice {get; set;}
}
در کد بالا فیلد InvioceID به عنوان کلید خارجی در جدول InvoiceItem در نظر گرفته شده.
خب حالا می خوایم ببینیم چجوری میشه این دو جدول رو با هم ادغام کرد و اطلاعات رو نمایش داد. باید چند نکته رو دقت کرد. در این رابطه هر رکورد از جدول Parent یا همون جدول Invoice شامل چندین رکورد از جدول Child یا جدول InvoiceItem می شه. بنابراین ما نیاز به مدلی داریم که در اون هر رکورد از جدول Invoice شامل چندین رکورد از جدول InvoiceItem بشه. پس میتونیم مدل زیر رو ایجاد کنیم.
کافیه یک کلاس ایجاد کنید و اسمش رو مثلا InvoiceViewModel بذارید.
کدهای InvoiceViewModel
public class InvoiceViewModel
{
public int ID {get; set;}
public DateTime InvoiceDate {get; set;}
public long InvoicePrice {get; set;}
public int CustomerID {get; set;}
public List<InvoiceItem> myItem {get; set;}
}
در ویومدل بالا فیلدهای جدول پدر یا همان Invoice را داریم و در آخر گفتیم هر رکورد شامل لیستی از InvoiceItem ها می باشد.
خب می تونیم برای نمایش اطلاعات به صورت Parent-Child از کوئری زیر استفاده کنیم.
var query = (from i in _db.Invoice
select new InvoiceViewModel()
{
ID = i.ID,
InvoiceDate = i.InvoiceDate,
InvoicePrice = i.InvoicePrice,
CustomerID = i.CustomerID,
myItem = _db.InvoiceItem.where(ii => ii.InvoiceID == i.InvoiceID).ToList()
}).ToList();
کدهای بالا دقیقا خروجی که نیاز دارید رو بهتون میدن . یعنی یک رکورد از جدول پدر به همراه رکوردهای جدول فرزند.
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
79
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
111
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1034
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
430
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1356
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4800
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
216
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
397
- پاسخ :
2
|
تاریخ :
1403/06/25
- ساعت :
11:39:00 PM
- بازدید :
568
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2013
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
79
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
111
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1034
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
430
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
931
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1356
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4800
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1161
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
599
- پاسخ :
1
|