2014-06-04 2 views
1

Я все еще новичок в C# и пытаюсь понять объекты списка.ASP.NET MVC Выберите значение списка, используя ключ

У меня есть объект списка с парами ключ/значение в нем, заполненный из базы данных (эта часть работает). Затем я хочу выбрать значение из этого списка, используя «ключ». Из того, что я прочитал, я думаю, что Linq может быть лучшим способом сделать это, однако я не могу полностью решить синтаксис, который мне нужен.

У меня есть список объектов следующим образом:

// Create a list of Items from the database, where Value is the 'key' and Text is the 'value' 
IEnumerable<SelectListItem> ItemList = dbLists.ItemList.Select(x => new SelectListItem { Text = x.Description, Value = x.Id.ToString() }); 

Затем я хочу, чтобы заполнить еще одну переменную с описанием выбранного элемента в модели, где модель только сохраняет идентификатор. Я пробовал различные запросы linq Where и Select, но не могу это обработать.

Самый простой способ, которым я могу думать, чтобы объяснить, что я пытаюсь добиться, чтобы использовать SQL синтаксис,

string SelectedItemDescription = SELECT Text FROM ItemList WHERE ItemList.Value = model.ItemCode 

Пример сценария будет что-то вроде:

ItemList 
{ 
(Value = "1", Text = "Item 1"), 
(Value = "2", Text = "Item 2"), 
(Value = "3", Text = "Item 3"), 
... 
}; 
model.ItemCode = 2; 
// How do I make: 
SelectedItemDesctiption = "Item 2"; 

Хотелось бы надеяться, что имеет смысл.

Спасибо.

ответ

3

вы можете сделать, как это в LINQ, если вы пишете это так:

string SelectedItemDescription = (from list in ItemList 
           where list.Value = model.ItemCode 
           select list.Text).FirstOrDefault(); 

или вы можете использовать методы расширения, если он всегда будет возвращать один элемент, то вы можете использовать SingleOrDefault():

SelectListItem SelectedItemDescription = ItemList.SingleOrDefault(item=>item.Value == model.ItemCode); 

if(SelectedItemDescription !=null) 
    {   

     string Key = SelectedItemDescription .Value; 
     string Text = SelectedItemDescription.Text; 
    } 

Если он будет возвращать несколько объектов, то вы можете использовать FirstOrDefault():

SelectListItem SelectedItemDescription = ItemList.FirstOrDefault(item=>item.Value == model.ItemCode); 

if(SelectedItemDescription !=null) 
{   

    string Key = SelectedItemDescription .Value; 
    string Text = SelectedItemDescription.Text; 
} 

ОБНОВЛЕНО:

Как @CodeGeek предложено в комментариях, вы можете сделать так:

string SelectedItemDescription =ItemList 
           .SingleOrDefault(item=>item.Value == model.ItemCode)!=null ? ItemList.SingleOrDefault(item=>item.Value == model.ItemCode).Text : String.Empty; 
+0

Ваш код будет бросать исключение нулевой ссылки, если этот пункт не в 'строки SelectedItemDescription список –

+0

= ItemList.SingleOrDefault (пункт => item.Value == model.ItemCode) .Text; ' будет делать это прямо –

+0

@DavidPilkington я использую' 'SingleOrDefault'' –

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