代码之家  ›  专栏  ›  技术社区  ›  sɐunıɔןɐqɐp Zmey

如何在Linq查询中获得“命名”元组组件?

  •  1
  • sɐunıɔןɐqɐp Zmey  · 技术社区  · 6 年前

    假设我有一组元组,比如 List<(string, Table)> Parallel.ForEach ,使用元组组件的“命名版本”。

    List<(string, Table)> list = new List<(string, Table)>();
    Parallel.ForEach(list, tuple => 
    {
        (string name, Table table) = tuple;
    
        // do stuff with components 'name' and 'table' here
    });
    

    我想用 name table tuple.Item1 tuple.Item2 因为这使代码更具可读性。为了实现这一点,我必须在 ForEach


    ForEach's 尸体?

    如果没有这样的语法,我们如何用扩展方法来实现呢?


    List<(string, Table)> list = new List<(string, Table)>();
    Parallel.ForEach(list, (string name, Table table) => 
    {
        // do stuff with variables 'name' and 'table' here
    });
    

    或者这个?

    List<(string, Table)> list = new List<(string, Table)>();
    Parallel.ForEach(list, (name, table) => 
    {
        // do stuff with variables 'name' and 'table' here
    });
    


    Linq 询问?

    例如。

    string[] names = parsed.Select((string name, Table table) => name).ToArray();
    

    而不是:

    string[] names = parsed.Select(t => t.Item1).ToArray();
    


    这将是非常好的,特别是当处理包含几个组件的元组时,例如。 List<(int, string, int, DateTime, ...)> 林克

    2 回复  |  直到 6 年前
        1
  •  5
  •   Christoph Lütjen    6 年前

    如何在Linq查询中获得“命名”元组组件?

    最简单的解决方法是给你的物品起个名字,就像这样

    List<(string Name, Table Table)> list = new List<(string, Table)>();
    // or simply
    var list = new List<(string Name, Table Table)>();
    
    Parallel.ForEach(list, t => 
    {
        // do something with t.Name, t.Table
        var name = t.Name;
        var table = t.Table;
    });
    

    C语言中是否有语法可以让我们得到解构的版本。。在ForEach里面

        2
  •  1
  •   knagaev    6 年前

    我觉得你想要这样的东西?

    string[] names = parsed.Cast<(string name, Table table)>().Select(p => p.name).ToArray();
    
        3
  •  1
  •   Revious    4 年前

    var k = executeResultSet.Select(s => new
    {
        IDUser = (int) s["IDUser"],
        SourceCode = s["SourceCode"],
        SourceSystem = s["SourceSystem"]
    }).ToList();
    
    var k = executeResultSet.Select(s => 
    (
        IDUser: (int) s["IDUser"],
        SourceCode: s["SourceCode"],
        SourceSystem: s["SourceSystem"]
    )).ToList();
    
    推荐文章