2012-02-02 88 views

回答

0

您可以使用Enumerable.Aggregate方法輕鬆地連接序列中的多個字符串。

你的情況,你必須先項目House實體的名單到House.HouseType字符串列表,然後成一個單一的字符串:

var houseTypes = person.Houses.Select(i => i.HouseType).AsEnumerable(); 
var emptyResult = "0"; 

return houseTypes.Any() ? 
    houseTypes.Select(i => i.ToString()) 
       .Aggregate((current, next) => current + ", " + next) : 
    emptyResult; 

或者你可以簡單地說, :

var houseTypes = person.Houses 
         .Select(i => i.HouseType) 
         .AsEnumerable() 
         .Select(i => i.ToString()); 
return String.Join(", ", houseTypes); 

它會返回一個空字符串 WH houseTypes序列爲空。

更新:

如果您使用實體框架4或以上,你可以使用built-in SQL functions之一,直接在數據庫中執行轉換爲字符串:

var houseTypes = person.Houses 
         .Select(i => SqlFunctions.StringConvert((double)i.HouseType)) 
         .AsEnumerable() 
return String.Join(", ", houseTypes); 
+0

我houseType不如因此我得到一個錯誤「不能將隱式轉換類型'字符串'轉換爲'short'」 – Kulpemovitz 2012-02-02 13:32:11

+0

@Kulpemovitz如果'HouseType'屬性類型短,則可以使用'ToString()'轉換爲一個字符串。我更新了我的例子。 – 2012-02-02 13:49:16

+0

太好了,但如果這個人沒有房子,現在就會失敗。但我仍然需要結果中的人 – Kulpemovitz 2012-02-02 13:57:33

0

你的意思是像?:

var data = context.People.Where(p => p.PersonId == <id>).SelectMany(p => p.Houses).Select(h => h.HouseType); 
var result = string.Join(<separator>, data); 
0
var houseTypes = person.Houses 
    .Select(i => i.HouseType).ToList(); 

return string.Join(" ", houseTypes.Select(x=>x.ToString()));