如何在lambda表达式

时间:2015-08-24 09:26:57

标签: c# linq lambda

我有一个方法,看起来如下:

bool GetIdByName(string name, out ID id)

我想在lambda表达式中使用它,以获得几个' id'一些名字':

var ids = names.Select(name => idService.GetIdByName(name, out id));

在这种情况下,我会在我的' ID中找到所有bool值。变量,这不是我想要的。是否也可以获得out参数' id'每次打电话给它?

3 个答案:

答案 0 :(得分:5)

您可以使用带有正文的委托:

IEnumerable<ID> ids = names.Select
(
    name =>
    {
        ID id;
        GetName(name, out id);

        return id;
    }
);

答案 1 :(得分:2)

我会将对GetIdByName的调用考虑到一个方法中,以便它变得更具可组合性。

var ids = names.Select(GetId);

private static ID GetId(string name)
{
    ID id;
    idService.GetIdByName(name, out id);
    return id;
}

答案 2 :(得分:2)

正在寻找类似的东西吗?

var ids = names
  .Select(name => {
    ID id = null; 

    if (!idService.GetIdByName(name, out id))
      id = null; // name doesn't corresponds to any ID

    return id;
  })
  .Where(id => id != null);

如果ID结构(因此 nullable ):

  var ids = names
    .Select(name => {
      ID id = null; 
      Boolean found = idService.GetIdByName(name, out id);

      return new {
        Found = found,
        ID = id
      };
    })
    .Where(data => data.Found)
    .Select(data => data.id);