2012-04-04 2 views
0

Как вернуть возвращаемое значение функции в LINQ.Как получить возвращаемое значение другой функции?

У меня есть IEnumerable из objects(Say ObjColl). Из этой коллекции объектов я должен отфильтровать объекты на основе возвращаемого значения другого function(say GetObjPropertyValue). Моим конечным результатом должен быть Словарь объекта и его свойствоValue. Этот словарь не должен иметь объектов, для которых propertyvalue ничего.

GetObjPropertyValue Функция принимает объект как вход и возвращает его свойство как строку. Но иногда он ничего не возвращает, если это свойство не существует на объектах.

Мой запрос что-то подобное,

Dictionary(obj, string)=ObjColl.Where(Function(p) not GetObjPropertyValue(p) is nothing) 

, но в приведенном выше запросе я должен написать код для хранения возвращаемого значения GetObjPropertyValue (р) и добавить OBJ-р и сочетание ReturnValue к словарю. Как это написать?

Для примера см ниже код:

Последняя строка ниже код является неправильным. но, пожалуйста, предложите мне, как исправить это. Мое намерение состоит в том, что я хочу получить сборник (скажем, словарь) каждого имени фрукта и его цвет (возвращенный другим вызовом функции) для всех плодов, которые GetFruitColor не является ничем (это может быть пустая или действительная строка).

[код] Частная функция GetFruitColor (фрукты) в виде строки 'Возвращает цвет фруктов. «Если действительные фрукты и цвет недоступны, он возвращает« »(пустая строка) « Если фрукты недействительны, фрукты не возвращаются. Конец функция

private sub MyMethod() 
    Create a list of strings. 
     Dim fruits As New List(Of String)(New String() _ 
           {"apple", "passionfruit", "banana", "mango", _ 
           "orange", "blueberry", "grape", "strawberry"}) 

Dim query = _fruits.Where(Function(fruit) k= GetFruitColor(fruit) if not k is nothing select fruit, k) 
End Sub 

В вышеприведенном коде последняя строка является неправильной. Итак, как положить getFruitColor в k, как исправить его, чтобы сохранить значение k и дать мне результат как словарь фруктов и значение k.

ответ

1

Я хотел бы предложить:

  • проект анонимного типа, состоящий из (фруктов, цвета)
  • Фильтра из "ничего" цвета
  • Создать словарь

В C# это будет :

var query = fruits.Select(fruit => new { fruit, color = GetFruitColor(fruit) }) 
        .Where(pair => !string.IsNullOrEmpty(pair.color)) 
        .ToDictionary(pair => pair.fruit, pair => pair.color); 

Корректировка соответственно для VB :)

+0

Отличный ответ Jon Skeet. Это дает мне правильное решение. Большое спасибо за вашу помощь. – kothasiva

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