微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linq投影将列表平整为已定义字符串

如何解决Linq投影将列表平整为已定义字符串

| 我正在尝试合并并用逗号分隔(或空格)一个列表并对其进行投影。我下面有一些示例代码
public class Friend
{
    public string Name { get; set; }
}

public class Person
{
    public int PersonID { get; set; }
    public string FirstName { get; set; }
    public string Surname { get; set; }
    List<Friend> Friends { get; set; }
}

public class ProjectedPerson
{
    public int PersonID { get; set; }
    public string FirstName { get; set; }
    public string Surname { get; set; }
    public string FriendsList { get; set; }
}

public class Test
{
    public void Mytest()
    {
        var query = from p in MyDataStore.Person
                select p;

       var results = from q in query
           select new ProjectedPerson
                {
                    PersonID = q.PersonID,FirstName = q.FirstName,Surname = q.Surname,FriendsList = q.FriendsList.Concat() //??? How can I concat this and return a string           
                };

    }
}
    

解决方法

        string.Join是更好的方法,但是滥用LINQ太有趣了。
var query = (from p in MyDataStore.Person
             select p).ToList();  // <-- bring into memory with ToList()

var results = from q in query
              select new ProjectedPerson
              {
                  PersonID = q.PersonID,FirstName = q.FirstName,Surname = q.Surname,FriendsList = q.Friends.Aggregate<Friend,string>(null,(accum,f) => accum + (accum == null ? accum : \",\") + f.Name)
              };
    ,        使用string.Join(请注意,列表必须首先在内存中),以合并Friend对象中的选定属性。如果您使用的是.NET 3.5,则需要使用ToArray()以及字符串的重载。3.5中的联接需要一个数组。
var query = (from p in MyDataStore.Person
             select p).ToList();  // <-- bring into memory with ToList()

var results = from q in query
              select new ProjectedPerson
              {
                  PersonID = q.PersonID,FriendsList = string.Join( \",\",q.Friends.Select( f => f.Name ) )
              };
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。