【问题标题】:String Join Using a Lambda Expression使用 Lambda 表达式进行字符串连接
【发布时间】:2012-05-19 13:07:16
【问题描述】:

如果我有一个这样的类的列表:

class Info {
    public string Name { get; set; }
    public int Count { get; set; }
}

List<Info> newInfo = new List<Info>()
{
    {new Info { Name = "ONE", Count = 1 }},
    {new Info { Name = "TWO", Count = 2 }},
    {new Info { Name = "SIX", Count = 6 }}
};

可以使用 Lambda 表达式将类列表中的属性进行字符串连接,如下所示:

"ONE(1), TWO(2), SIX(6)"

【问题讨论】:

    标签: c# linq lambda


    【解决方案1】:

    你可以像下面这样使用

    你可以像这样返回一个特定的类型

    Patient pt =  dc.Patients.Join(dc.PatientDetails, pm => pm.PatientId, pd => pd.PatientId,
                             (pm, pd) => new
                             {
                                 pmm = pm,
                                 pdd = pd
                             })
                             .Where(i => i.pmm.PatientCode == patientCode && i.pmm.IsActive || i.pdd.Mobile.Contains(patientCode))
                             .Select(s => new Patient
                             {
                                 PatientId = s.pmm.PatientId,
                                 PatientCode = s.pmm.PatientCode,
                                 DateOfBirth = s.pmm.DateOfBirth,
                                 IsActive = s.pmm.IsActive,
                                 UpdatedOn = s.pmm.UpdatedOn,
                                 UpdatedBy = s.pmm.UpdatedBy,
                                 CreatedOn = s.pmm.CreatedOn,
                                 CreatedBy = s.pmm.CreatedBy
                             })
    

    或者你可以像这样检索匿名类型

    var patientDetails = dc.Patients.Join(dc.PatientDetails, pm => pm.PatientId, pd => pd.PatientId,
                     (pm, pd) => new
                     {
                         pmm = pm,
                         pdd = pd
                     })
                     .Where(i => i.pmm.PatientCode == patientCode && i.pmm.IsActive || i.pdd.Mobile.Contains(patientCode))
                     .Select(s => new 
                     {
                         PatientId = s.pmm.PatientId,
                         PatientCode = s.pmm.PatientCode,
                         DateOfBirth = s.pmm.DateOfBirth,
                         IsActive = s.pmm.IsActive,                     
                         PatientMobile = s.pdd.Mobile,
                         s.pdd.Email,
                         s.pdd.District,
                         s.pdd.Age,
                         s.pdd.SittingId
    
                     })
    

    【讨论】:

    【解决方案2】:
    string.Join(", ", newInfo.Select(i => string.Format("{0}({1})", i.Name, i.Count)))
    

    您也可以覆盖 ToString。

    class Info
    {
       ....
       public override ToString()
       {
            return string.Format("{0}({1})", Name, Count);
       }
    }
    

    ...然后调用很简单(.Net 4.0):

    string.Join(", ", newInfo);
    

    【讨论】:

    • 如果它在我的项目中,我会选择这样的东西。
    • +1,在这种情况下绝对推荐覆盖ToString()
    【解决方案3】:
    String.Join(", ", newInfo.Select(i=>i.Name+"("+i.Count+")") );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2017-06-11
      相关资源
      最近更新 更多