2015-12-13 4 views
0

Добрый вечер, у меня есть следующая таблицаSQLite Сумма столбца на основе диапазона дат

public class SalesRecord 
{ 
    [PrimaryKey, AutoIncrement] 
    public int SalesRecID { get; set; } 

    [Indexed] 
    public string SalesRecDate { get; set; } 
    public string SalesRecCustName { get; set; } 
    public string SalesRecProdName { get; set; } 
    public int SalesRecProdQty { get; set; } 
    public double SalesRecProdPrice { get; set; } 
    public double SalesRecTotalPrice { get; set; } 
} 

, и я был в состоянии отображения строк элементов в XAML ListBox.

<ListBox Name="listSalesRecord" Height="400" HorizontalAlignment="Left" Margin="0,5,0,0"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal" Height="18" VerticalAlignment="Top" > 
           <TextBlock Text="{Binding SalesRecID}" Margin="5,0,0,0" Width="30" FontSize="14"/> 
           <TextBlock Text="{Binding SalesRecDate}" Margin="5,0,0,0" Width="80" FontSize="14"/> 
           <TextBlock Text="{Binding SalesRecCustName}" Margin="5,0,0,0" Width="80" FontSize="14"/> 
           <TextBlock Text="{Binding SalesRecProdName}" Margin="5,0,0,0" Width="80" FontSize="14"/> 
           <TextBlock Text="{Binding SalesRecProdQty}" Margin="5,0,0,0" Width="60" FontSize="14"/> 
           <TextBlock Text="{Binding SalesRecProdPrice, Converter={StaticResource Converter}, ConverterParameter=\{0:0.00\}}" Margin="5,0,0,0" Width="60" FontSize="14"/> 
           <TextBlock Text="{Binding SalesRecTotalPrice, Converter={StaticResource Converter}, ConverterParameter=\{0:0.00\}}" Margin="5,0,0,0" Width="60" FontSize="14"/> 
          </StackPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 

используя следующий запрос диапазона дат. Не было никаких проблем, потому что я знал о формате yyyy-MM-dd.

private void btnSearchRecordDateRange_Click(object sender, RoutedEventArgs e) 
    { 
     var searchDateRange = conn.Query<SalesRecord>("SELECT * FROM SalesRecord WHERE date(SalesRecDate) BETWEEN date('" + tbxCDPFrom.Text + "') AND date('" + tbxCDPTo.Text + "')"); 

     listSalesRecord.ItemsSource = searchDateRange; 
    } 

, но теперь я хочу, чтобы вычислить суммы продукта Количество на основе диапазона дат, который я хочу, чтобы отобразить в текстовом поле, используя один и тот же запрос, с единственным изменением я сделал было заменить SELECT * FROM с SELECT SUM(SalesRecProdQty) FROM. Но эта же строка запроса не предоставила мне требуемую сумму.

private void btnSearchSumDateRange_Click(object sender, RoutedEventArgs e) 
    { 
     var searchSumProdQty = conn.Query<SalesRecord>("SELECT SUM(SalesRecProdQty) FROM SalesRecord WHERE date(SalesRecDate) BETWEEN date('" + tbxCDPFrom.Text + "') AND date('" + tbxCDPTo.Text + "')"); 

     tbxSearchQty.Text = searchSumProdQty.ToString(); 
    } 

Я получил сообщение об ошибке в текстовом поле:

System.Collections.Generic.List`1[SalePad.Models.SalesRecord] 

Может кто-нибудь сказать мне, где я сделал неправильно.

SELECT * работал, но SELECT SUM(SalesRecProdQty) не удалось, хотя они использовали ту же строку запроса.

Я использую SQLite.Net-PCL, и я нахожусь в WinRT для UWP, а не WPF.

+0

Это ошибка? Попробуйте что-то вроде этого: SELECT SUM (s.SalesRecProdQty) FROM SalesRecord s WHERE date (s.SalesRecDate) BETWEEN date ('"+ tbxCDPFrom.Text +"') AND date ('"+ tbxCDPTo.Text +"') ") ; –

+0

Привет 0______0, я все еще получаю ту же ошибку System.Collections.Generic.List'1 [SalePad.Models.SalesRecord] – Shycs

ответ

0

жаль беспокоить людей, но я нашел ответ

Чтобы получить SUM(SalesRecProdQty) вы должны сделать это

var searchdaterange = conn.Query<SalesRecord>("SELECT * FROM SalesRecord WHERE date(SalesRecDate) BETWEEN date('"+ tbxCDPFrom.Text + "') AND date('"+ tbxCDPTo.Text + "')"); 

     var sumProdQty = searchdaterange.AsEnumerable().Sum(o => o.SalesRecProdQty); 
     tbxSearchQty.Text = sumProdQty.ToString(); 

бы признателен, если кто-то может объяснить логику, почему я вынужден использовать AsEnumerable.Sum(o => o.SalesRecProdQty); потому что исходный синтаксис работал бы в SQL Fiddle, но он отказался работать с моей программой.

Смежные вопросы