我正在尝试使用SelectMany将对象转换为字符串。但是,当list属性值为空时,我将不会得到所需的字符串。
我期待的结果就像
名称1-2-4:名称2-
但是得到这样的结果
名称1-2-4
。第二个名称被忽略,因为“分数”列表是空的。
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查询。
var result = string.Join(" : ", persons.SelectMany(x=>GetNames(x)));发布于 2021-05-03 14:33:46
一个简单的解决方案是向您的人员添加一个助手方法,该方法可以做您想做的事情:
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。
发布于 2021-05-03 15:01:32
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}";https://stackoverflow.com/questions/67370396
复制相似问题