首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Linq将对象转换为字符串

使用Linq将对象转换为字符串
EN

Stack Overflow用户
提问于 2021-05-03 14:09:33
回答 2查看 590关注 0票数 1

我正在尝试使用SelectMany将对象转换为字符串。但是,当list属性值为空时,我将不会得到所需的字符串。

我期待的结果就像

名称1-2-4:名称2-

但是得到这样的结果

名称1-2-4

。第二个名称被忽略,因为“分数”列表是空的。

代码语言:javascript
复制
using System;
using System.Linq;
using System.Collections.Generic;
                    
public class Program
{
    public static void Main()
    {
        var person1 = new Person()
        {
            Name = "name1",
            Scores = new List<Score>
            {
                new Score
                {
                    InitialScore =2,
                    UpdatedScore = 4
                }
            }
        };

        var person2 = new Person()
        {
            Name = "name2",
            Scores = new List<Score>()
        };

        var persons = new List<Person>();
        persons.Add(person1);
        persons.Add(person2);       
                
        var result = string.Join(" : ", persons.SelectMany(x=>x.Scores, (parent, child)=> parent.Name + "-" + child.InitialScore +"-"+ child.UpdatedScore));
        Console.WriteLine(result);
    }
}

public class Person
{
    public string Name {get; set;}
    public List<Score> Scores {get; set;}
}

public class Score
{
    public int InitialScore {get; set;}
    public int UpdatedScore {get; set;}
}

编辑:基于@JonasH解决方案的使用此linq查询。

代码语言:javascript
复制
var result = string.Join(" : ", persons.SelectMany(x=>GetNames(x)));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-03 14:33:46

一个简单的解决方案是向您的人员添加一个助手方法,该方法可以做您想做的事情:

代码语言:javascript
复制
    public static IEnumerable<string> GetNames(this Person p)
    {
        if (p.Scores.Count == 0)
        {
            yield return p.Name;
        }
        else
        {
            foreach (var score in p.Scores)
            {
                yield return $"{p.Name}-{score}";
            }
        }
    }

并在SelectMany中使用它而不是SelectMany。

票数 1
EN

Stack Overflow用户

发布于 2021-05-03 15:01:32

代码语言:javascript
复制
var result1 = persons.SelectMany(x => x.Scores, (parent, child) => parent.Name + "-" + child.InitialScore + "-" + child.UpdatedScore).FirstOrDefault();

var result2 = persons.Where(x => x.Scores.Count() <= 0).Select(x => x.Name).FirstOrDefault()+"-";
            
var result = $"{result1}:{result2}";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67370396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档