SQLITE:返回今天最近的 5 条记录并格式化日期/时间
Posted
技术标签:
【中文标题】SQLITE:返回今天最近的 5 条记录并格式化日期/时间【英文标题】:SQLITE: Return 5 most recent records today and format date/time 【发布时间】:2021-05-01 18:27:13 【问题描述】:我有一个具有 ListView 的 Xamarin.Forms 应用程序。我想用日期为今天日期的 5 个最新项目填充 ListView。如果少于 5 个项目,ListView 应该只为每个项目显示一行(例如,如果只有一个项目,则 ListView 应该只有一行)。
然后我想将日期格式转换为 mm/dd/yyyy(而不是 dd/mm/yyyy)并将时间更改为 12 小时格式。这可能吗?
public Task<List<Product>> GetProductAsync()
DateTime todayDateTime = DateTime.Today;
return _database.Table<Product>().OrderByDescending(x => x.ProductDateTime).Where(x.ProductDateTime.Date == DateTime.Today).Take(5).ToListAsync();
<ListView x:Name="recentProductList" SeparatorVisibility="None"
Grid.Row="1" Margin="20,0" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<ListView.ItemTemplate>
<DataTemplate >
<ViewCell>
<Frame BackgroundColor="White" BorderColor="#F0F0F0" Padding="5" Margin="0,0,0,5" HasShadow="False">
<Grid HeightRequest="50" HorizontalOptions="FillAndExpand" VerticalOptions="Start">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Text="Binding ProductDateTime" TextColor="#757575" FontSize="12" VerticalOptions="Center" Margin="20,0"/>
</Grid>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
protected override async void OnAppearing()
base.OnAppearing();
recentProductList.ItemsSource = await App.Database.GetProductAsync();
我遇到的问题是:The name 'x' does not exist in the current context
对于这部分声明:Where(x.ProductDateTime.Date == DateTime.Today)
。我无法检索最近的记录。
如何检索具有今天日期的最近 5 条记录 - 然后格式化结果(以 mm/dd/yyyy 和 12 小时格式)?
【问题讨论】:
Where(x=>x....) 会做。 应该是:.Where(x => x.ProductDateTime.Date == DateTime.Today)
【参考方案1】:
像这样修改你的查询
return _database.Table<Product>().OrderByDescending(x => x.ProductDateTime)
.Where(y => y.ProductDateTime.Date == DateTime.Today).Take(5).ToListAsync();
要更改日期格式,请使用StringFormat
<Label Text="Binding ProductDateTime, StringFormat='0:MM/dd/yyyy'" TextColor="#757575" FontSize="12" VerticalOptions="Center" Margin="20,0"/>
有关 .NET 支持的可用日期格式字符串列表,请参阅 here
【讨论】:
很好的答案 - 谢谢。这部分查询导致错误: 'Where(y => y.ProductDateTime.Date == DateTime.Today)' 。错误:成员访问无法编译表达式。从“ProductDateTime.Date”中删除“.Date”可以解决此错误,但显然不会产生预期的结果。你知道解决这个问题的方法吗?谢谢。 您可以在 Where 之前执行 ToList() 以避免这种情况,但这会将所有数据加载到内存中。以上是关于SQLITE:返回今天最近的 5 条记录并格式化日期/时间的主要内容,如果未能解决你的问题,请参考以下文章