خب براساس شماره نامه و کد شخص گیرنده مجددا گروهبندی کنید و اگر تعداد بیش از یک بود نوع ارجاعی و در غیراینصورت همان یک مورد را سلکت کنید.
var result =
(
from d in db.DupOfInLetters
group d by new {d.LetterId, d.SendType}
into grouping
select
grouping.Key.SendType == 0
? grouping.Where(rec => rec.SendType == 0)
.OrderByDescending(rec => rec.Id)
.Take(1)
.FirstOrDefault(d => d.RefferralledTo == currentUser)
: grouping.Where(rec => rec.SendType == 1)
.OrderByDescending(rec => rec.Id)
.FirstOrDefault(rec => rec.SendType == 1 && rec.RefferralledTo == currentUser)
)
.Where(rec => rec != null)
.GroupBy(g => new {g.LetterId, g.RefferralledTo})
.Select(g =>
g.Count() > 1
? g.FirstOrDefault(rec => rec.SendType == 0)
: g.FirstOrDefault()
)
.ToList();
این هم معادل لامبدا
var result =
db.DupOfInLetters.GroupBy(d => new {d.LetterId, d.SendType})
.Select(grouping => grouping.Key.SendType == 0
? grouping.Where(rec => rec.SendType == 0)
.OrderByDescending(rec => rec.Id)
.Take(1)
.FirstOrDefault(d => d.RefferralledTo == currentUser)
: grouping.Where(rec => rec.SendType == 1)
.OrderByDescending(rec => rec.Id)
.FirstOrDefault(rec => rec.SendType == 1 && rec.RefferralledTo == currentUser))
.Where(rec => rec != null)
.GroupBy(g => new {g.LetterId, g.RefferralledTo})
.Select(g =>
g.Count() > 1
? g.FirstOrDefault(rec => rec.SendType == 0)
: g.FirstOrDefault()
)
.ToList();