2011-05-30 27 views
2

我想要连接和逗号消除(或空间)的列表和项目它。下面有一些示例代码。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   
       }; 

    } 
} 
+0

我不确定Concat是否正确。 – markpcasey 2011-05-30 14:56:42

+0

我不确定Concat是否正确。它可能是Aggregate。 – markpcasey 2011-05-30 15:24:59

回答

1

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) 
       }; 
+0

非常感谢您的帮助。 – markpcasey 2011-05-31 08:29:51

+1

EF 4.1说:LINQ to Entities不能识别方法'System.String Aggregate [..]' – K0D4 2014-06-20 18:04:53

6

使用string.Join(注意列表需要首先在内存中),从Friend对象中提取选定的属性。如果您使用的是.NET 3.5,则需要使用ToArray()以及string.Join中的重载需要一个数组。

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 = string.Join(", ", q.Friends.Select(f => f.Name)) 
       }; 
相关问题