دسته بندی ها
03:20 1401/05/25

نوشتن کویری به صورت تو در تو در Entity Framework

مشخصات سوال کننده :
کاربر : rezanoori     امتیاز کاربر : 0     رتبه کاربر : 7020
دسته بندی : Entity Framework

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2509
1 نظر
mmr1401 : سلام قبل نوشتن اون پاسخ منم مثل کاربر saedbfd میخواستم پیشنهاد بدم خب دو تا جدول کن این محصولات اصلی و زیرمحصولات. حالا نمیدونم دلیل خاصی داره که اینکارو نمیکنی؟ فکرکنم دو تا جدول داشتن در این مورد ساده ترین و بهترین کار باشه

امتیاز کاربر : 45   رتبه کاربر : 19   تاریخ ثبت : 02:38 1401/05/26
پاسخ دهنده : mmr1401 08:46 1401/05/25

سلام

اگر 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  استفاده میکنم که ساختارش شبیه هم سوال شما هست.

به این پاسخ امتیاز بدهید    0
امتیاز: 45 رتبه: 19
1 نظر
rezanoori : ممنون از پاسختون ولی این چیزی که شما نوشتید مربوط به TSQL هستش که تو این حالت اوکیه ولی همین رو اگه بخوایم توی linq پیاده کنیم تقریبا مصیبت میشه

امتیاز کاربر : 0   رتبه کاربر : 7020   تاریخ ثبت : 11:52 1401/05/25
پاسخ دهنده : saedbfd 10:12 1401/05/25

بهتر بود کوئری که نوشتید هم قرار می دادید تا اگر اشکالی داره بهتون گفته بشه.

شما می فرمایید یک سری محصول اصلی دارید و یک سری محصول که وابسته و زیرگروه محصولات اصلی هستن.

خب بهتره در این شرایط شما 2 تا جدول داشته باشید. جدول اول محصولات اصلی رو نگهداری کنید و در جدول دوم محصولات زیر گروه . مثل گروه و زیر گروه میشه. در واقع ساختار شما Parent و Child هست و باید به همین صورت هم جداولتون طراحی بشه. مطمئنا اگر غیر از این باشه به مشکلات زیادی بعدا برخورد خواهید کرد.

به این پاسخ امتیاز بدهید    0
امتیاز: 1654 رتبه: 1
پاسخ دهنده : hamid_b 18:31 1401/05/25

بهتر بود کدهاتون رو هم قرار می دادید. اما با توجه به پاسخ 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()
              }

شما کافیه

ویرایش شده در سه شنبه 25 مرداد 1401 ساعت 18:31:50
به این پاسخ امتیاز بدهید    0
امتیاز: 510 رتبه: 4
1 نظر
rezanoori : منم همین حالت رو پیاده کردم ولی مشکلی که وجود داره سلکت تو در تو در stored prosedure تولید شده توسط اینتیتی زیاد میشه بخاطر اینکه داخل تگ select مجددا db فراخوانی میشه امکان گذاشتن کد به دلایلی برام مقدور نبود و بابت این نتونستم بذارم

امتیاز کاربر : 0   رتبه کاربر : 7020   تاریخ ثبت : 08:49 1401/05/25
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود