2011-05-30 20 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)) 
       }; 
相關問題