2012-02-24 22 views
1

私はListの商品を持っています。特定の商品Idをクエリ文字列のパラメータから取得する必要があります。しかし、私はいつも製品Idを私に渡しているとは限りません。私が商品Idを持っていない場合、私はリストの最初の製品にデフォルトする必要があります。私が持っている瞬間FirstOrDefaultがnullを返す場合、リストの最初の項目を返します

@Model.Products.FirstOrDefault(x => x.Id == productId); 

これはほんの一がない場合、それはnullにデフォルト設定されます、その特定のIdで製品を選択します。

私が欲しいものを達成する方法はありますか?

答えて

7

それはあなたが望むように聞こえる:

var product = productId == null ? Model.Products.FirstOrDefault() 
        : Model.Products.FirstOrDefault(x => x.Id == productId); 
... 
@product 

またはあなたが意味するかもしれません:

@(Model.Products.FirstOrDefault(x => x.Id == productId) ?? 
      Model.Products.FirstOrDefault()) 
+0

+1私は(私の上と現実に私はコードおそらくだろうあなたの答えの第二の部分を好むと思いますそれは、特に私がそれを維持しなければならないことを知っていれば、私は知っていましたが、 "WTFは二重の疑問符を意味しますか?"のような言い方で働いています。 )。 –

+0

それは素晴らしい、ありがとう。 –

0

ねえ、これは、それはあなたに

MSDNのリンクを助けるかもしれチェック:http://msdn.microsoft.com/en-us/library/bb340482.aspxあなたはこのような何かをしようとしたらどうなりますか

List<int> months = new List<int> { }; 

      // Setting the default value to 1 after the query. 
      int firstMonth1 = months.FirstOrDefault(); 
      if (firstMonth1 == 0) 
      { 
       firstMonth1 = 1; 
      } 
      Console.WriteLine("The value of the firstMonth1 variable is {0}", firstMonth1); 

      // Setting the default value to 1 by using DefaultIfEmpty() in the query. 
      int firstMonth2 = months.DefaultIfEmpty(1).First(); 
      Console.WriteLine("The value of the firstMonth2 variable is {0}", firstMonth2); 

      /* 
      This code produces the following output: 

      The value of the firstMonth1 variable is 1 
      The value of the firstMonth2 variable is 1 
      */ 
1

@if (productId != null) // assuming it's nullable 
{ 
    @Model.Products.FirstOrDefault(x => x.Id == productId) 
} 
else 
{ 
    @Model.Products.FirstOrDefault() 
} 

私はこれは少し面倒に見えるかもしれ知っているが、それはそれはやっているものをかなり明確だ(他の誰かがそれを維持する必要がある場合だと思う)、それが動作するはずです。

実際には私はおそらくこれをViewModelに設定して、正しいと思っていた値にアクセスします。

関連する問題