我有一个 Offer 类,例如
public class Offer
{
public int OfferID { get; set; }
public DateTime OfferDate { get; set; }
public int CustomerID { get; set; }
}
现在我有很多这样的优惠
List<Offer> oList = new List<Offer>();
oList.Add(new Offer() { OfferID = 1, OfferDate = new DateTime(2018, 01, 01), CustomerID = 1 });
oList.Add(new Offer() { OfferID = 2, OfferDate = new DateTime(2018, 01, 03), CustomerID = 1 });
oList.Add(new Offer() { OfferID = 3, OfferDate = new DateTime(2018, 01, 01), CustomerID = 2 });
oList.Add(new Offer() { OfferID = 4, OfferDate = new DateTime(2018, 01, 05), CustomerID = 2 });
oList.Add(new Offer() { OfferID = 5, OfferDate = new DateTime(2018, 01, 02), CustomerID = 1 });
我想按 ID 获取报价,同时也想按日期获取该客户之前的报价。
目前我正在使用 Linq2SQL 并进行两个选择。首先,我通过 ID 选择所需的 Offer,然后通过OfferDate
.
示例:如果OfferID==5
该客户之前的报价是OfferID==1
.
public List<Offer> GetCurrentAndPrevious(int OfferID)
{
using (DataContext cx = new DataContext())
{
Offer oCurrent = cx.Offer.Single(x => x.OfferID = OfferID);
Offer oPrevious = cx.Offer.OrderBy(x => x.OfferDate)
.Last(x => x.CustomerID = oCurrent.CustomerID && x.OfferDate < oCurrent .OfferDate);
return new List<Offer>() { oCurrent , oPrevious };
}
}
问题:有没有一种方法可以通过一次查询来解决这个问题,而不是查询数据库两次?