استفاده از Distinct برای List توسط Entity Framework در C#
سلام بنده دو جدول دارم که فیلدهای اونها به صورت زیر هستن :
جدول مشتری
public class customer
{
public int customerId {get; set;}
public string customerName {get; set;}
}
جدول خریدهای مشتری (به صورت خیلی خلاصه)
public class order
{
public int orderId {get; set;}
public int customerId {get; set;}
public dateTime orderDate {get; set;}
}
اطلاعات موجود در جدول order :
خب در جدول order ممکنه یک مشتری چندین بار سفارش داشته باشه. حالا من میخوام لیست مشتریانی که سفارش دارن رو نمایش بدم. یعنی اگر در تصویر بالا نگاه کنید مشتریهای 3 و 5 باید نمایش داده بشه. از کویری زیر استفاده کردم :
var query = _context.order.Distinct.ToList();
ولی در خروجی هر 5 رکورد نمایش داده میشه. چجوری میتونم لیست مشتریانی که خرید داشتن رو پیدا کنم ؟
سلام
Distinct براساس ستون مشخصی عمل میکنه. به عبارت دیگه شما برای Distinct مشخص نکردی براساس کدوم ستون عمل کنه و تکراری ها رو شمارش نکنه. شما یا باید برای این دستور نام ستون موردنظرت رو بگی و یا حتی شما میتونی یه select براساس costomerid بزنی و بعد روی نتیجه این select دستورDistinct رو اجرا کنی.
حذف رکوردهای تکراری توسط دستور Distinct
برای استفاده از دستور Distinct در انتیتی فریم ورک یا باید بر اساس یک ستون این کار رو انجام بدید یا اینکه اگر بر اساس کل سطرها (بر اساس انتیتی) می خواید این کار انجام بشه باید سطرها دارای اطلاعات تکراری باشن.
الان در تصویری که شما از اطلاعات خودتون ارسال کردید درسته که customerId ها تکراری هستن ولی orderDate ها یکسان نیستن.
استفاده از دستور Distinct در سی شارپ بر اساس یک ستون مشخص
دستور شما به صورت زیر باید تبدیل بشه :
var model = _Context.orders.Select(s => s.customerId).Distinct().ToList();
با اجرا کوئری بالا شما فقط customerId هایی که تکراری نیستن رو خواهید داشت.
دقت کنید اگر بر اساس بیش از یک ستون هم خواستید اطلاعات رو داشته باشید می تونید به صورت زیر انجام بدید.(فرض کنید در خدول order ستون CustomerName و CustomerTel هم دارید.
var model = _Context.orders.Select(s => new {customerId = s.customerId , customerName = s.customerName, customeTel = s.customerTel}).Distinct().ToList();
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- رفع خطا در مایگریشن - Specify ON DELETE NO ACTION or ON UPDATE NO ACTION
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress