Вернуть первый элемент в списке, если FirstOrDefault возвращает ноль - PullRequest
1 голос
/ 24 февраля 2012

У меня есть List продуктов, мне нужно получить элемент из списка с конкретным продуктом Id, который я получаю из параметра строки запроса. Тем не менее, я не всегда могу передать мне продукт Id. Если у меня нет продукта Id, мне нужно по умолчанию использовать первый продукт в списке.

На данный момент у меня есть:

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

Это просто выбирает продукт с указанным Id, если его нет, по умолчанию будет null.

Есть ли способ достичь того, чего я хочу?

Ответы [ 3 ]

7 голосов
/ 24 февраля 2012

Звучит так, как вы хотите:

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())
1 голос
/ 24 февраля 2012

Что произойдет, если вы попробуете что-то подобное?

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

Я знаю, это может показаться немного громоздким, но совершенно ясно, что он делает (подумайте, если кто-то другой должен его поддерживать), и это должно сработать.

Но на самом деле я, вероятно, предпочел бы установить это в ViewModel, а затем просто получить доступ к значению, которое, как я знал, было бы правильным.

0 голосов
/ 24 февраля 2012

Эй, отметьте, это может помочь вам

Ссылка 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
            */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...