2016-11-04 4 views
1

У меня есть ListItemCollection. Каждый элемент имеет тип ListItem. Я хочу вернуть только текст с элементом, который имеет значение.ListItemCollection - получить текст из значения с LINQ

В настоящем время, я использую эту функцию:

public string GetTextFromPaymentWayCollection(string value) 
{ 
    ListItemCollection listPaymentWays = DB.GetList(); 

    foreach (ListItem item in listPaymentWays) 
    { 
    if (item.Value == value) 
    { 
     return item.Text; 
    } 
    } 
    return null; 
} 

Есть ли способ сделать это с помощью LINQ, вместо того, чтобы использовать эту функцию?

ответ

5

Ваш listPaymentWays имеет ListItemCollection, который не реализует IEnumerable<T>. Методы linq - это методы расширения на IEnumerable<T>.

Например подпись FirstOrDefault:

public static TSource FirstOrDefault<TSource>(
    this IEnumerable<TSource> source 
) 

Что вы должны сделать, это первое Cast (который возвращает IEnumerble<ListItem>), а затем использовать FirstOrDefault:

var result = listPaymentWays.Cast<ListItem>() 
          .FirstOrDefault(x => x.Value == value)?.Text; 

?. - функция Null Proparation C# 6.0.


Кроме того, я бы рекомендовал DB.GetList() подвергнет метод, который будет получить значение таким образом, фильтрация будет происходить в базе данных, а не в памяти. Это отходы, чтобы привести все данные, создать ListItems, а затем просто взять один элемент.

+0

Спасибо, это работает. Что это за знак вопроса в конце? Возможно, у вас есть ссылка на документацию об этом? – FrenkyB

+0

@FrenkyB - см. Обновление –

2
return listPaymentWays.FirstOrDefault(x => x.Value == value)?.Text; 

Должен работать нормально.

+0

Почему я не могу использовать FirstOrDefault в ListItemCollection? – FrenkyB

+0

@FrenkyB Вы включили System.Linq? – drajvver

2

Вам необходимо использовать его первым, чтобы использовать Where. Остальное - просто обычный Линк.

string s = listPaymentWays.Cast<ListItem>().ToDictionary(i => i.Value, i => i.Text).Where(x => x.Value == value).FirstOrDefault().Value; 
+1

Зачем конвертировать в словарь, а затем делать 'Where'? не нужно :) –

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