我在Windows Phone UWP应用程序上使用SQLite,但我想这个问题在任何SQL数据库上同样有效:
我只是在寻找SQL来实现这一目标 - 我可以自己将其插入代码中。
我有一个Trip对象:
public class Trip
{
public string Iso3Code { get; set; }
public string CityCode { get; set; }
public string StateCode { get; set; }
public DateTime Date { get; set; }
public bool DeletedTrip { get; set; }
}
当用户添加旅行时,会为旅行的每一天创建Trip
个对象,例如用户在4月1日至4月5日期间前往法国旅行。系统会创建5个Trip
个对象,每天一个。
我有一个问题,在给定Date
,Iso3Code
(国家/地区代码),StateCode
和CityCode
的情况下,我需要获取所有Trip
SQLite数据库中的对象。例如对于上面的旅行示例,假设我的日期为2017-04-03,我需要一种从数据库中检索所有5个Trip
对象的有效方法。
我当前的方法有效,但对于长途旅行,例如2年,它非常慢 - 我基本上每天都会在数据库中访问一次:
internal static List<Trip> GetWholeTrip(Trip trip)
{
List<Trip> wholeTrip = new List<Trip>();
Trip currentTrip = trip;
//get trips before this date
while (currentTrip != null)
{
wholeTrip.Insert(0, currentTrip);
currentTrip = GetAllTripsOnDate(currentTrip.Date.Date.AddDays(-1)).FirstOrDefault(p => p.Iso3Code == trip.Iso3Code && p.StateCode == trip.StateCode && p.CityCode == trip.CityCode && !p.DeletedTrip);//Note: RMc - should only ever be 1 but using FirstOrDefault as we don't control the TT web service!
}
//get trips after this date
currentTrip = GetAllTripsOnDate(trip.Date.Date.AddDays(1)).FirstOrDefault(p => p.Iso3Code == trip.Iso3Code && p.StateCode == trip.StateCode && p.CityCode == trip.CityCode && !p.DeletedTrip);//Note: RMc - should only ever be 1 but using FirstOrDefault as we don't control the TT web service!
while (currentTrip != null)
{
wholeTrip.Add(currentTrip);
currentTrip = GetAllTripsOnDate(currentTrip.Date.Date.AddDays(1)).FirstOrDefault(p => p.Iso3Code == trip.Iso3Code && p.StateCode == trip.StateCode && p.CityCode == trip.CityCode && !p.DeletedTrip);//Note: RMc - should only ever be 1 but using FirstOrDefault as we don't control the TT web service!
}
return wholeTrip;
}
所以我基本上从提供的日期向后循环,直到我到达指定位置没有旅行的那一天,然后我返回到提供的日期并循环前进到没有指定旅行的那一天地点。这让我连续几天到该地点旅行。
是否有可用于返回所需数据的SQL语句? - 无论是一次打击,还是 - 任何低于上述的都会很好。