2012-04-04 152 views
0

如何在LINQ中給出另一個函數的返回值。我有IEnumerable。從該對象集合中,我必須根據另一個function(say GetObjPropertyValue)的返回值來過濾對象。我的最終輸出應該是對象字典和它的propertyValue。這本字典不應該有propertyvalue沒有的對象。如何獲得另一個函數的返回值?

GetObjPropertyValue函數將Object作爲輸入並將其屬性返回爲字符串。但有時它不會返回Object,如果該屬性不存在。

我的查詢是一樣的東西,

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

但在上面的查詢我應該寫代碼來存儲GetObjPropertyValue(P)的返回值,並添加OBJ-P和ReturnValue組合到字典中。如何寫這個?

例如參見下面的代碼:

以下代碼最後一行是錯誤的。但請告訴我如何糾正它。我的本意是,我希望每個fruitname及其所有的水果色(其它函數調用返回),其中GetFruitColor是沒有什麼的輸出集合(比如字典)(它可以爲空或有效的字符串)。 '

[code] Private function GetFruitColor(fruit)as string '它返回水果的顏色。 '如果有效的水果和顏色不可用,則返回「」(空字符串) '如果水果無效水果,則不返回任何東西。端功能

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

出色答卷喬恩斯基特。它給了我正確的解決方案。非常感謝你的幫助。 – kothasiva 2012-04-05 07:05:56

相關問題