2012-02-02 90 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()));