کوئری نویسی در EF Core - قسمت سوم - جوین نویسی
نویسنده: وحید نصیری
تاریخ: ۱۳۹۹/۰۵/۰۷ ۱۲:۱۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
namespace EFCorePgExercises.Entities
{
public class Booking
{
// ...
public int MemId { set; get; }
public virtual Member Member { set; get; }
// ...
}
} var startTimes = context.Bookings
.Where(booking => booking.Member.FirstName == "David"
&& booking.Member.Surname == "Farrell")
.Select(booking => new { booking.StartTime })
.ToList();
namespace EFCorePgExercises.Entities
{
public class Booking
{
// ...
public int FacId { set; get; }
public virtual Facility Facility { set; get; }
// ...
}
} int[] tennisCourts = { 0, 1 };
var date1 = new DateTime(2012, 09, 21);
var date2 = new DateTime(2012, 09, 22);
var startTimes = context.Bookings
.Where(booking => tennisCourts.Contains(booking.Facility.FacId)
&& booking.StartTime >= date1
&& booking.StartTime < date2)
.Select(booking => new { booking.StartTime, booking.Facility.Name })
.ToList();
namespace EFCorePgExercises.Entities
{
public class Member
{
// ...
public virtual ICollection<Member> Children { get; set; }
public virtual Member Recommender { set; get; }
public int? RecommendedBy { set; get; }
// ...
}
} var members = context.Members
.Where(member => member.Recommender != null)
.Select(member => new { member.Recommender.FirstName, member.Recommender.Surname })
.Distinct()
.OrderBy(member => member.Surname).ThenBy(member => member.FirstName)
.ToList();
var members = context.Members
.Select(member => new
{
memFName = member.FirstName,
memSName = member.Surname,
recFName = member.Recommender.FirstName ?? "",
recSName = member.Recommender.Surname ?? ""
})
.OrderBy(member => member.memSName).ThenBy(member => member.memFName)
.ToList();
A LEFT JOIN B A LEFT OUTER JOIN B A RIGHT JOIN B A RIGHT OUTER JOIN B A FULL JOIN B A FULL OUTER JOIN B A INNER JOIN B A JOIN B
namespace EFCorePgExercises.Entities
{
public class Booking
{
// ...
public int FacId { set; get; }
public virtual Facility Facility { set; get; }
public int MemId { set; get; }
public virtual Member Member { set; get; }
// ...
}
} namespace EFCorePgExercises.Entities
{
public class Member
{
// ...
public virtual ICollection<Booking> Bookings { set; get; }
}
} int[] tennisCourts = { 0, 1 };
var members = context.Members
.SelectMany(x => x.Bookings)
.Where(booking => tennisCourts.Contains(booking.Facility.FacId))
.Select(booking => new
{
Member = booking.Member.FirstName + " " + booking.Member.Surname,
Facility = booking.Facility.Name
})
.Distinct()
.OrderBy(x => x.Member)
.ToList();
var date1 = new DateTime(2012, 09, 14);
var date2 = new DateTime(2012, 09, 15);
var items = context.Members
.SelectMany(x => x.Bookings)
.Where(booking => booking.StartTime >= date1 && booking.StartTime < date2
&& (
(((booking.Slots * booking.Facility.GuestCost) > 30) && (booking.MemId == 0)) ||
(((booking.Slots * booking.Facility.MemberCost) > 30) && (booking.MemId != 0))
))
.Select(booking => new
{
Member = booking.Member.FirstName + " " + booking.Member.Surname,
Facility = booking.Facility.Name,
Cost = booking.MemId == 0 ?
booking.Slots * booking.Facility.GuestCost
: booking.Slots * booking.Facility.MemberCost
})
.Distinct()
.OrderByDescending(x => x.Cost)
.ToList();
var members = context.Members
.Select(member =>
new
{
Member = member.FirstName + " " + member.Surname,
Recommender = context.Members
.Where(recommender => recommender.MemId == member.RecommendedBy)
.Select(recommender => recommender.FirstName + " " + recommender.Surname)
.FirstOrDefault() ?? ""
})
.Distinct()
.OrderBy(member => member.Member)
.ToList();
var date1 = new DateTime(2012, 09, 14);
var date2 = new DateTime(2012, 09, 15);
var items = context.Members
.SelectMany(x => x.Bookings)
.Where(booking => booking.StartTime >= date1 && booking.StartTime < date2)
.Select(booking => new
{
Member = booking.Member.FirstName + " " + booking.Member.Surname,
Facility = booking.Facility.Name,
Cost = booking.MemId == 0 ?
booking.Slots * booking.Facility.GuestCost
: booking.Slots * booking.Facility.MemberCost
})
.Where(x => x.Cost > 30)
.Distinct()
.OrderByDescending(x => x.Cost)
.ToList();
var numbers = new[]
{
new[]{1,2,3},
new[]{4,5,6},
new[]{7,8,9},
};
var values =
numbers.SelectMany(_=>_)//x=>x
.ToList();