【问题标题】:Generate string from Grouping Linq Query从分组 Linq 查询生成字符串
【发布时间】:2009-01-06 12:06:59
【问题描述】:

给定以下代码:

var people = new List<person>(){ new person { Name = "John", FamilyName = "Pendray" },
             new person { FamilyName = "Emery", Name = "Jake"},
             new person { FamilyName = "Pendray", Name = "Richard" } };

var q = from p in people
                 orderby p.Name
                 group p by p.FamilyName into fam
                 orderby fam.Key
                 select new { fam.Key, members = from p in fam select p };

是否可以将最后一行替换为将输出包含以下两个字符串的 IEnumerable&lt;string> 的选择: “彭德雷·约翰·理查德” “金刚砂杰克”?是否可以将 linq 查询投影到这样的字符串中?

编辑:我知道这可以通过进一步的代码实现,但我感兴趣的是这是否可以从 linq 查询本身以类似于 VB 能够从查询中投影 xml 的方式完成,如 http://www.thinqlinq.com/default/Projecting-XML-from-LINQ-to-SQL.aspx (尤其是本页最后一个代码块)

【问题讨论】:

    标签: c# linq string


    【解决方案1】:
    var q = from p in people
            orderby p.Name
            group p by p.FamilyName into fam
            orderby fam.Key
            select fam.Key + " " + string.Join(" ", (from fm in fam select fm.Name).ToArray());
    

    返回

    Emery Jake
    Pendray John Richard

    【讨论】:

      【解决方案2】:

      肯定的。

      您必须更改选择部分。最简单的方法是定义一个接受 IEnumerable 并生成该字符串的函数,然后调用该函数

      people = new List<person>(){ new person { Name = "John", FamilyName = "Pendray" },
               new person { FamilyName = "Emery", Name = "Jake"},
               new person { FamilyName = "Pendray", Name = "Richard" } };
      
      var q = from p in people
              orderby p.Name
              group p by p.FamilyName into fam
              orderby fam.Key
              select new { Key = fam.Key, Text = GetText(fam) };
      
      
      
      // and elsewhere...
      private string GetText(IEnumerable<person> family) {
          string result = "Whatever"; // build the result string here
          return result;
      }
      

      另外,如果您只想要文本,您可以将查询的最后一行更改为简单

              select GetText(fam);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        相关资源
        最近更新 更多