2012-04-04 3 views
0

LINQ에서 다른 함수의 반환 값을 제공하는 방법.다른 함수의 반환 값을 얻는 방법?

저는 IEnumerableobjects(Say ObjColl)입니다. 해당 개체 컬렉션에서 다른 function(say GetObjPropertyValue)의 반환 값을 기준으로 개체를 필터링해야합니다. 최종 출력물은 Dictionary of object와 그 propertyValue 여야합니다. 이 딕셔너리는 propertyvalue가 아무 것도없는 객체를 가져서는 안됩니다.

GetObjPropertyValue 함수는 Object를 입력으로 사용하고 해당 속성을 string으로 반환합니다. 그러나 그 속성이 객체에 존재하지 않는다면 아무 것도 반환하지 않는다.

내 쿼리는

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

같은 것입니다하지만 위의 질의에 나는 GetObjPropertyValue (P)의 반환 값을 저장하고 사전에 OBJ-p와 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 

는 마지막 행은 잘못된 것입니다. 그래서 k에 getFruitColor를 넣는 방법, k 값을 저장하고 그것을 과일의 사전으로 출력하고 k 값을 얻는 방법. 이 것 C#에서 사전

만들기

  • (과일, 색상)
  • 필터 밖으로 구성된 익명의 형식으로 프로젝트 "아무것도"색상
  • :

답변

1

내가 제안 be :

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

관련 문제