SQLITE:Return 今天最近的 5 条记录,格式为 date/time
SQLITE: Return 5 most recent records today and format date/time
我有一个 Xamarin.Forms 应用程序,它有一个 ListView。我想用日期为今天的 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 小时格式)?
像这样修改您的查询
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
我有一个 Xamarin.Forms 应用程序,它有一个 ListView。我想用日期为今天的 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 小时格式)?
像这样修改您的查询
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