Entity Framework 分页(Select 记录使用字符串日期时间列)
Entity Framework Pagination (Select records using string datetime column)
我有一个table,它有开始日期(格式"yyyymmddhhss"),对应的实体属性是字符串类型。我想使用 LINQ SQL 获取 StartDate >= SelectedStartDate 的所有记录。由于这个table有超过1000万条记录,我也需要使用分页
任何人都可以建议如何实现这个/
此致,
拉吉
最好的解决方案当然是将字符串值迁移到 DATETIME
列并从该列查询数据。
但是如果您没有足够的权限来执行此操作,那么幸运的是您在 table 中使用了 yyyymmddhhss
格式,因为它保留了日期的自然顺序;您所要做的就是将参数转换为所需格式的字符串:
public IEnumerable<YourDataObject> GetData(DateTime date, PageInfo pageInfo)
{
var startDate = date.ToString("yyyyMMddHHss");
return _dbContext.Table
.OrderBy(x => x.StartDate)
.Where(x => String.Compare(x.StartDate, startDate) >= 1)
.Skip(pageInfo.PageSize * pageInfo.PageIndex)
.Take(pageInfo.PageSize)
.Select(x => new YourDataObject
{
//
});
}
这是 LINQPad 中的示例输出:
我有一个table,它有开始日期(格式"yyyymmddhhss"),对应的实体属性是字符串类型。我想使用 LINQ SQL 获取 StartDate >= SelectedStartDate 的所有记录。由于这个table有超过1000万条记录,我也需要使用分页
任何人都可以建议如何实现这个/
此致,
拉吉
最好的解决方案当然是将字符串值迁移到 DATETIME
列并从该列查询数据。
但是如果您没有足够的权限来执行此操作,那么幸运的是您在 table 中使用了 yyyymmddhhss
格式,因为它保留了日期的自然顺序;您所要做的就是将参数转换为所需格式的字符串:
public IEnumerable<YourDataObject> GetData(DateTime date, PageInfo pageInfo)
{
var startDate = date.ToString("yyyyMMddHHss");
return _dbContext.Table
.OrderBy(x => x.StartDate)
.Where(x => String.Compare(x.StartDate, startDate) >= 1)
.Skip(pageInfo.PageSize * pageInfo.PageIndex)
.Take(pageInfo.PageSize)
.Select(x => new YourDataObject
{
//
});
}
这是 LINQPad 中的示例输出: