سلام دوستان
من یک جدول به نام Product دارم که محصولات داخلش ذخیره میشه.
این جدول یک فیلد به نام Sub از نوع int داره که اگر بالای عدد 0 بود به این معنی هستش که این محصول زیرمحصول هستش و مرتبط با یکی از رکوردهای این جدول هستش
public partial class Product
{
public int Id { get; set; }
public string Title { get; set; }
public string Image { get; set; }
public string Content { get; set; }
public string Tags { get; set; }
public int Sub { get; set; }
}
این مدل جدول Product من هستش (البته اینجا مختصرش کردم)
حالا میخوام یک رابطه درون جدولی ایجاد کنم که وقتی یک محصول اصلی صدا زده میشه همراه اون زیرمحصولات مربوط به اون (که رکوردهاش داخل همین جدول هستن) هم Include بشن و بتونم واکشی بکنم
در حال حاضر با روش های Select داخل entity اینکارو میتونم بکنم ولی query تولید شده تو این روش به شدت طولانیه و باعث شده واکشی اطلاعات خیلی زمان ببره
هیچ راهی به ذهنم نمیرسه و از طرفی هم نمیتونم مدل هامو باز نویسی بکنم (به دلیل پیچیدگی برنامه نویسی و زیاد بودن دیتای داخل و ارتباطات مختلفی که با جدول های دیگه داره)
ممنون میشم راهنمایی کنید
سلام
اگر public int Sub { get; set; } شماره محصول اصلی باشه که این محصول زیرمحصول اون حساب میشه به نظرم میتونی از select استفاده کنی
select id,title,sub,
(select count(id) from product as p2 where p1.id=p2.sub) as subproduct
from product as p1
البته این select و من توی یکی از جداول دیتابیس sql استفاده میکنم که ساختارش شبیه هم سوال شما هست.
بهتر بود کوئری که نوشتید هم قرار می دادید تا اگر اشکالی داره بهتون گفته بشه.
شما می فرمایید یک سری محصول اصلی دارید و یک سری محصول که وابسته و زیرگروه محصولات اصلی هستن.
خب بهتره در این شرایط شما 2 تا جدول داشته باشید. جدول اول محصولات اصلی رو نگهداری کنید و در جدول دوم محصولات زیر گروه . مثل گروه و زیر گروه میشه. در واقع ساختار شما Parent و Child هست و باید به همین صورت هم جداولتون طراحی بشه. مطمئنا اگر غیر از این باشه به مشکلات زیادی بعدا برخورد خواهید کرد.
بهتر بود کدهاتون رو هم قرار می دادید. اما با توجه به پاسخ mmr1401 همین رو به صورت انتیتی فریم ورک براتون می نویسم :
کوئری در T-Sql :
select id,title,sub,
(select count(id) from product as p2 where p1.id=p2.sub) as subproduct
from product as p1
این کوئری رو شما به راحتی میتونید با انتیتی هم بنویسید. به صورت زیر :
var query = (from p in _db.product
select new
{
id = p.id,
title = p.title,
sub = p.sub,
pcount = _db.product.where(p2=>p2.sub == p.id).count()
}
شما کافیه
تاریخ :
1403/12/23
- ساعت :
03:14:00 PM
- بازدید :
135
- پاسخ :
1
|
تاریخ :
1403/12/22
- ساعت :
11:05:00 AM
- بازدید :
187
- پاسخ :
1
|
تاریخ :
1399/11/25
- ساعت :
11:22:00 AM
- بازدید :
3896
- پاسخ :
2
|
تاریخ :
1403/10/20
- ساعت :
11:39:00 AM
- بازدید :
270
- پاسخ :
1
|
تاریخ :
1399/06/07
- ساعت :
12:45:00 PM
- بازدید :
8331
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2237
- پاسخ :
1
|
تاریخ :
1403/01/06
- ساعت :
05:14:00 PM
- بازدید :
854
- پاسخ :
1
|
تاریخ :
1402/12/12
- ساعت :
03:20:00 PM
- بازدید :
669
- پاسخ :
1
|
تاریخ :
1402/07/20
- ساعت :
01:34:00 PM
- بازدید :
1075
- پاسخ :
1
|
تاریخ :
1402/06/27
- ساعت :
12:27:00 PM
- بازدید :
1688
- پاسخ :
2
|
تاریخ :
1404/01/07
- ساعت :
05:02:00 AM
- بازدید :
89
- پاسخ :
1
|
تاریخ :
1402/04/28
- ساعت :
09:04:00 PM
- بازدید :
1314
- پاسخ :
0
|
تاریخ :
1403/12/30
- ساعت :
06:43:00 PM
- بازدید :
66
- پاسخ :
1
|
تاریخ :
1398/08/23
- ساعت :
09:16:00 PM
- بازدید :
9852
- پاسخ :
1
|
تاریخ :
1404/01/03
- ساعت :
12:18:00 PM
- بازدید :
38
- پاسخ :
1
|
تاریخ :
1404/01/03
- ساعت :
10:39:00 AM
- بازدید :
45
- پاسخ :
1
|
تاریخ :
1404/01/02
- ساعت :
05:05:00 PM
- بازدید :
60
- پاسخ :
1
|
تاریخ :
1403/12/30
- ساعت :
06:52:00 PM
- بازدید :
48
- پاسخ :
1
|
تاریخ :
1399/06/04
- ساعت :
02:25:00 PM
- بازدید :
4419
- پاسخ :
2
|
تاریخ :
1403/11/30
- ساعت :
10:36:00 AM
- بازدید :
202
- پاسخ :
2
|