0

如何在 LINQ 中给出另一个函数的返回值。

我有一个IEnumerableobjects(Say ObjColl)从该对象集合中,我必须根据 another 的返回值过滤对象function(say GetObjPropertyValue)。我的最终输出应该是对象字典及其属性值。这本字典不应该包含没有 propertyvalue 的对象。

GetObjPropertyValue函数将 Object 作为输入,并将其属性作为字符串返回。但有时,如果对象上不存在该属性,它不会返回任何内容。

我的查询是这样的,

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

但在上面的查询中,我应该编写代码来存储 GetObjPropertyValue(p) 的返回值,并将 obj-p 和 returnValue 组合添加到字典中。这要怎么写??

例如见下面的代码:

代码下面的最后一行是错误的。但请建议我如何纠正它。我的意图是,我想要 GetFruitColor 不是空的所有水果(它可以是空的或有效的字符串)的每个水果名称及其颜色(由其他函数调用返回)的输出集合(比如字典)。

[code] 私有函数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值的字典。

4

1 回答 1

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 进行相应调整 :)

于 2012-04-04T16:29:14.020 回答