0

私の問題を説明するのは難しいでしょうが、できるだけ明確にしようと思います。私の英語も申し訳ありません...

実際、私はこの配列を私の見解に持っています。 配列

それを取得するコードは次のとおりです。

        @foreach (var item in Model)
        {
              TimeSpan result = DateTime.Now - item.OrderDate;

              if (result.Days < 31)
              {            
                    <tr border="1" bgcolor="@Odd">
                       <td> @Html.DisplayFor(modelItem => item.Username) </td>    
                       <td> @Html.DisplayFor(modelItem => item.OrderId) </td>  
                        <td>
                            <ul style="list-style-type:none; padding:0; margin:0">
                                @if (item.OrderDetails != null)
                                {
                                    foreach (var o in item.OrderDetails)
                                    {
                                        if (o.Pack == null)
                                        { 
                                            <li>  @Html.DisplayFor(modelItem => o.Product.Name)  </li>
                                        }
                                        else
                                        {  
                                            <li> <text>Pack</text>  @Html.DisplayFor(modelItem =>  o.Pack.Name)  </li>
                                        }
                                    }
                                }  
                            </ul>             
                        </td>
......... other td.............  
                    </tr>
              }                                        // 1116 = 36 months
              else if (result.Days > 31 && result.Days <= 1116)
              {
                  if (item.OrderDetails != null)
                  {
                      foreach (var a in item.OrderDetails)
                      {
                          if (a.Pack != null)
                          {          


                            <tr border="1" bgcolor="@Odd">    
                                <td> @Html.DisplayFor(modelItem => item.Username) </td>
                                <td> @Html.DisplayFor(modelItem => item.OrderId) </td>  

                                <td> 
                                    <ul style="list-style-type:none; padding:0; margin:0"> 
                                        @if (item.OrderDetails != null)
                                        {
                                            foreach (var o in item.OrderDetails)
                                            {
                                                if (o.Pack != null)
                                                {
                                                <li><text>Pack </text> @Html.DisplayFor(modelItem => o.Pack.Name)</li> 
                                                }
                                            }
                                        } 
                                    </ul> 
                                </td>      
    ......... other td.............                         
         </table>

ですから、ご存知のように、Product と Pack の 2 種類の Product があります。最初の IF 条件 (result.days < 31) では、注文日が 31 日未満であるため、注文番号 59 のように Pack と Product を取得します。それが仕事探しです。

ここで、2 つ目の IF 条件 >31 & <1116 で、自分の PACK だけを取得したいと考えています。それも問題なく動作します。私は2つのパックを持っているだけで、製品が表示されていません。それは素晴らしいです(単価と数量の列に注意を払わないでください。スクリーンショットを撮った瞬間にいくつかの行のコメントを外すのを忘れました.何もないはずの価格と数量があるのはなぜですか。) しかし、ご覧のとおり、2 番目の状態にあるときに、1 つの注文に対して 2 回行を取得します。どうすればそれを通過できますか?最初の条件のように 1 つのラインを持っているだけですか?

私が明確かどうかわかりません... 私がここで 2 つのモデルを扱っていることを知りたいかもしれません。1 つの OrderModel と 1 つの OrderDetailModel。最初のものには、OrderId、OrderDate、Username、ClientId が含まれます。2 番目のものには、OrderDetailId、OrderId、ProductId、UnitPrice (製品用)、PackId、UnitPricePack が含まれます。

回答、ヒント、リンクなど、どうもありがとうございました...

4

1 に答える 1

1

これは必要ありません:

                  foreach (var a in item.OrderDetails) 
                  {    
                      if (a.Pack != null) 
                      {         

31 日から 1116 日経過したアイテムがあり、商品があり、パックがない場合でも、tr 要素を取得し、Product & Pack 列は空になります。

それがうまくいかない場合は、おそらく havePack と呼ばれる bool var を作成します。

                  var havepack = false,
                  foreach (var a in item.OrderDetails) 
                  {    
                      if (a.Pack != null) 
                      {         
                          havePack = true;
                      }
                  }
                  if (havePack)
                  {  //now make your <tr> element here
于 2012-09-20T15:12:53.880 に答える