PDA

View Full Version : سوال: مشکل با join و group در linq



ShahinRad97
جمعه 03 آبان 1392, 19:21 عصر
سلام
با یه مشکلی برخوردم که ممنون میشم راهنماییم کنید. به صورت ساده شده بیان میکنم.
دو تا جدول در نظر بگیرید.

جدول Moshtari:
id (کد مشتری)
name (نام)
family (نام خانوادگی)

جدول Foroosh:
id (کد فروش)
moshtari_id (کد مشتری از جدول بالا)
mablagh (مبلغ)

هر مشتری ممکنه چند بار خرید کنه ممکنه هم هیچ خریدی براش ثبت نشده باشه.

برنامه من با entity framework هست.
حالا من میخوام یه انتخاب روی اینا داشته باشم به صورتی که توی یه جدول یه همچین چیزی نشون بده.

کد | نام| فامیلی |جمع خرید


که اگه یه مشتری حتی خرید هم نداشت 0 نشون بده.
این کد هست ولی گروه بندی نمیکنه:
dbEntities db= new dbEntities();
var query = from m in db.tblMoshtari
join f in db.tblForoosh on m.id equals f.moshtari_id into mf
from mft in mf.DefaultIfEmpty()
select new
{
کد = m.id,
نام = m.name,
فامیلی = m.family,,
جمع خرید= ((m.id == mft.moshtari_id) ? mft.mablagh : 0)
};
dataGridView1.DataSource = query.ToLim();

Mahmoud.Afrad
جمعه 03 آبان 1392, 22:09 عصر
توی این مورد اگر ارتباط بین جداول رو برقرار کرده باشی نیازی نیست join و گروهبندی رو بنویسید:

var query =
from m in db.tblMoshtari
select new
{
کدمشتری = m.id,
نام = m.name,
فامیلی = m.family,
جمع = m.tblForoosh.Any() ? m.tblForoosh.Sum(i => i.mablagh) : 0
};

ShahinRad97
جمعه 03 آبان 1392, 23:17 عصر
ممنون از راهنماییتون.
حل شد.

ShahinRad97
شنبه 04 آبان 1392, 12:06 عصر
حالا یه مشکل دیگه به وجود اومده. بعد از اینکه ارتباط برقرار کردم دیگه حذف نمیکنه.

قبلا وقتی یه مشتری رو حذف میکردم تمام فیش های اونو هم حذف میکردم بعد saveChange میکردم.
الان این خطا رو میده:



The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.

Mahmoud.Afrad
شنبه 04 آبان 1392, 14:27 عصر
میتونی دو تا کار بکنی
یکی اینکه : رابطه ای که تعیین کردی رو طوری تنظیم کنی که فیش ها رو بطور اتوماتیک حذف کنه. در همون پنجره که ارتباط رو تعریف کردی گزینه Insert and update specification ، قسمت delete rule را روی Cascade بزارید.
یا اینکه
در یک تراکنش اول تمام فیش ها رو حذف کنی بعد مشتری رو حذف کنی