2016-07-07 13 views
0

GRIDVIEWにそれぞれのオーダーID、最終ユニット、rawcostが添付された食品のタイトルを表示するドロップダウンリストから、選択した月までに表示したいと考えています。C#LINQ DateTimeビュー月ごとの利益

しかし、月の値を取得するためにDateTimeを変換する方法がわからないので、私はDatetimeのデータベースに問題があります。

これは私のコードです。

protected void BtnSearch_Click(object sender, EventArgs e) 
    { 
     int month = Convert.ToInt32(DropDownListMonth.SelectedItem.ToString()); 
     double rawCost = 0.0; 
     double grossProfit = 0.0; 
     double profit = 0.0; 

     if (!this.IsPostBack) 
     { 
      var db = new FoodOrderingDBContext(); 
      GridView1.DataSource = (from OrderTable in db.OrderTables 
            join OrderDetail in db.OrderDetails 
            on OrderTable.OrderID equals OrderDetail.OrderID 
            join FoodDetail in db.FoodDetails 
            on OrderDetail.FoodID equals FoodDetail.FoodID 
            where OrderTable.DeliveredDateTime.Value.Month == month 
            select new 
            { 
             month = OrderTable.OrderedDateTime, 
             foodtitle = OrderDetail.FoodDetail.FoodTitle, 
             finalunitprice = OrderDetail.FinalUnitPrice, 
             quantity = OrderDetail.Quantity, 
             rawcost = FoodDetail.RawCost, 
            }).ToList(); 

      var myquery = (from OrderTable in db.OrderTables 
          join OrderDetail in db.OrderDetails 
          on OrderTable.OrderID equals OrderDetail.OrderID 
          join FoodDetail in db.FoodDetails 
          on OrderDetail.FoodID equals FoodDetail.FoodID 
          where OrderTable.DeliveredDateTime.Value.Month == month 
          select new 
          { 
           month = OrderTable.OrderedDateTime, 
           foodtitle = OrderDetail.FoodDetail.FoodTitle, 
           finalunitprice = OrderDetail.FinalUnitPrice, 
           quantity = OrderDetail.Quantity, 
           rawcost = FoodDetail.RawCost, 
          }); 

      foreach (var item in myquery) 
      { 
       rawCost += item.rawcost; 
       grossProfit += item.finalunitprice;      
      } 

      profit = grossProfit - rawCost; 

      lblTotalSales.Text = grossProfit.ToString(); 
      lblTotalProfit.Text = profit.ToString(); 


     } 
    } 

aspx.cs

.aspxの

<asp:DropDownList ID="DropDownListMonth" runat="server" Width="200px"> 
        <asp:ListItem Value="1">January</asp:ListItem> 
        <asp:ListItem Value="2">February</asp:ListItem> 
        <asp:ListItem Value="3">March</asp:ListItem> 
        <asp:ListItem Value="4">April</asp:ListItem> 
        <asp:ListItem Value="5">May</asp:ListItem> 
        <asp:ListItem Value="6">June</asp:ListItem> 
        <asp:ListItem Value="7">July</asp:ListItem> 
        <asp:ListItem Value="8">August</asp:ListItem> 
        <asp:ListItem Value="9">September</asp:ListItem> 
        <asp:ListItem Value="10">October</asp:ListItem> 
        <asp:ListItem Value="11">November</asp:ListItem> 
        <asp:ListItem Value="12">December</asp:ListItem> 
       </asp:DropDownList> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <asp:Button ID="BtnSearch" runat="server" Text="Search"  OnClick="BtnSearch_Click" /></td> 
     </tr> 
    </table> 
    <hr /> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:Label ID="lblShowMonth" runat="server" Text='<%# Eval("month") %>'></asp:Label> 
      <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" 
       EmptyDataText="No records found"> 
       <Columns> 
        <asp:TemplateField HeaderStyle-Font-Size="Large" HeaderText="Order Id"> 
         <ItemTemplate> 
          <asp:Label ID="lblOrderId" runat="server" Text='<%# Eval("orderid") %>'></asp:Label> 
         </ItemTemplate> 
         <ItemStyle HorizontalAlign="Center" Height="50px" Width="175px"></ItemStyle> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderStyle-Font-Size="Large" HeaderText="Food Title"> 
         <ItemTemplate> 
          <asp:Label ID="lblFoodTitle" runat="server" Text='<%# Eval("foodtitle") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderStyle-Font-Size="Large" HeaderText="Final Unit Price"> 
         <ItemTemplate> 
          <asp:Label ID="lblFinalUnitPrice" runat="server" Text='<%# Eval("finalunitprice") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderStyle-Font-Size="Large" HeaderText="Raw Cost"> 
         <ItemTemplate> 
          <asp:Label ID="lblRawCost" runat="server" Text='<%# Eval("rawcost") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
      <table> 
       <tr> 
        <td> 
         <asp:Label ID="lblSales" runat="server" Text="Total Sales:"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lblTotalSales" runat="server" Text=""></asp:Label> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <asp:Label ID="lblProfit" runat="server" Text="Total Profit:"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lblTotalProfit" runat="server" Text=""></asp:Label> 
        </td> 
       </tr> 
      </table> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

親切に私を助ける:(

+1

'month = OrderTable.OrderedDateTime.Month'を試しましたか? – user3185569

+1

あなたの問題が何であるかはっきりしません。 'DateTime'の月部分だけが必要な場合は、' where'節のように 'Month'プロパティを使います。おそらく、あなたの正確な問題が何であるかをもう少し説明することができます。 – juharr

+0

私は売っている食品と利益を月単位で表示したいので、DeliveredDateTimeのデータ型はDateTimeなので、LINQ文を書くのは難しいです。 – LuidonVon

答えて

1

、データベース内のタイプDateTime?です。あなたは値がnullでないことを確信しているのであればDateTimeとしてキャストし、そのMonthの値を使用してください:

var myquery = (from OrderTable in db.OrderTables 
          join OrderDetail in db.OrderDetails 
          on OrderTable.OrderID equals OrderDetail.OrderID 
          join FoodDetail in db.FoodDetails 
          on OrderDetail.FoodID equals FoodDetail.FoodID 
          where ((DateTime)(OrderTable.DeliveredDateTime)).Month == month 
          select new 
          { 
           month = OrderTable.OrderedDateTime, 
           foodtitle = OrderDetail.FoodDetail.FoodTitle, 
           finalunitprice = OrderDetail.FinalUnitPrice, 
           quantity = OrderDetail.Quantity, 
           rawcost = FoodDetail.RawCost, 
          }); 
+0

@juharrよく私のコードを修正し、説明を追加しました。 –

+0

私はこれが問題であるとは確信していませんが、私は月の値を取得するためにDateTimeを変換する方法がわかりません。これは間違っている 'month = OrderTable.OrderedDateTime'部分。 – juharr

+0

はいデータベースの型はDateTimeです。私はあなたの援助に基づいてコードを更新し、また修正した月= OrderTable.OrderDateTime.monthしかし、私がサイトを実行するときに、gridviewが読み込まれなかったことを除いて何の問題もなく、何が間違っていたのか把握しようとしています。 。 – LuidonVon