جوین دو جدول در انتیتی فریم ورک و نمایش بر اساس ستون مشترک
سلام . من دو جدول دارم به نام های product و product Detail که میخواهم این دو جدول با هم جوین کنم و میخواهم بعد از جوین آن سطرهایی که productId یکسان دارند تنها یک سطر از آنها را نمایش بدهد.
کلاس Product :
public class Product
{
[Key]
public int ProductId { get; set; }
[Required]
public int Category_code { get; set; }
public Category Category { get; set; }
[Required]
public int SubCategory_code { get; set; }
public SubCategory SubCategory { get; set; }
[Required]
[Display(Name = "نام کالا")]
public string Name { get; set; }
[Required]
[Display(Name = "کد کالا")]
public string Code_product { get; set; }
[Required]
[Display(Name = "توضیحات جریی")]
public string Description_Detail { get; set; }
[Required]
[Display(Name = "توضیحات کلی")]
public string Description_General { get; set; }
[Required]
[Display(Name = "قیمت")]
public double price { get; set; }
}
کلاس ProductDetails :
public class ProductDetail
{
[Key]
public int ProductDetail_Id { get; set; }
[Required]
public int ProductId { get; set; }
public Product Product { get; set; }
[Required]
[Display(Name = "رنگ")]
public string color { get; set; }
[Required]
[Display(Name = "تعداد")]
public int count { get; set; }
[Required]
[Display(Name = "عکس")]
public string image { get; set; }
}
این هم کد جوینی است که نوشتم :
var product = (from p in _context.ProductRepositoryUW.Get()
join pd in _context.ProductDetailRepositoryUW.Get()
on p.ProductId equals pd.ProductId
select new ProductListViewModel()
{
ProductId = p.ProductId,
ProductDetail_Id = pd.ProductDetail_Id,
Name = p.Name,
image = pd.image,
price = p.price
}).ToList();
پاسخ هوش مصنوعی
شما می توانید برای حذف سطرهای تکراری بر اساس `ProductId` از متد `GroupBy` استفاده کنید. در کد شما می توان به شکل زیر تغییراتی اعمال کرد:
var product = (from p in _context.ProductRepositoryUW.Get()
join pd in _context.ProductDetailRepositoryUW.Get()
on p.ProductId equals pd.ProductId
group pd by new { p.ProductId, p.Name, p.price } into g
select new ProductListViewModel()
{
ProductId = g.Key.ProductId,
Name = g.Key.Name,
price = g.Key.price,
image = g.FirstOrDefault().image // فقط از اولین سطر استفاده می شود
}).ToList();
این کد با استفاده از `GroupBy` سطرها را بر اساس `ProductId` گروه بندی می کند و سپس با استفاده از `FirstOrDefault` تنها یک سطر برای هر گروه انتخاب می شود.
در لینک زیر نحوه جوین جداول در انتیتی فریم ورک توضیح داده شده.
جوین جداول و نمایش داده های دلخواه در انتیتی فریم ورک
- شما یک جدول به نام Product دارید که کلید اصلی این جدول ProductID هست.
- یک جدول هم به نام ProductDetails دارید که فیلد ProductID از جدول Product در اون کلید خارجی می خواهید استفاده کنید. خب اولین کاری که باید انجام می دادید و انجام نشده این هست که باید فیلد ProductID رو به عنوان کلید خارجی در این جدول معرفی کنید. به کد زیر دقت کنید این کار انجام شده براتون.
public class ProductDetail
{
[Key]
public int ProductDetail_Id { get; set; }
[Required]
[Display(Name = "رنگ")]
public string color { get; set; }
[Required]
[Display(Name = "تعداد")]
public int count { get; set; }
[Required]
[Display(Name = "عکس")]
public string image { get; set; }
[Required]
public int ProductId { get; set; }
[ForeignKey("ProductID")]
public virtual Product Product { get; set; }
}
خب حالا می تونید کوئری جوین خودتون رو به صورت زیر بنویسید :
var productquery = (from p in _context.Product join pd in _context.ProductDetail
on p.ProductId equals pd.ProductId
select new ProductListViewModel()
{
///...
}).ToList();
خب توسط دستورات می تونید به راحتی جوین رو انجام بدید. شما میتونید از انواع Join در انتینتی فریم ورک استفاده کنید. مثلا Left Join یا Right Join یا ... (انواع Join و آشنایی با آنها)
نحوه Left Join در انتیتی فریم ورک
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2