使用Lambda表达式连接字符串

11
如果我有一个像这样的类列表:
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)"

3个回答

20
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);

如果这是我的项目,我会选择类似这样的方案。 - asawyer
+1,绝对推荐在这种情况下重写ToString()方法。 - yamen

10
String.Join(", ", newInfo.Select(i=>i.Name+"("+i.Count+")") );

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

                 })

这与 string.Join() 不同,我认为您可能误解了问题。已经有一个关于 Join/Where with LINQ and Lambda 的成熟问题。 - user692942

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接