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 =&gt; 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 条记录并格式化日期/时间的主要内容,如果未能解决你的问题,请参考以下文章

查询 MongoDB 以返回 5 个最近的记录(Mongoose 框架)[重复]

使用距位置的距离有效地计算最近的 5 个位置

SQLite 按日期排序1530019888000

如何提高 SQLite 数据库的性能?

如何从 Sqlite 获取最后一条记录?

Android - 如何处理 1000 条记录 SQLite [重复]