我有一个Person实体类似的东西LINQ到实体 - 得到所有相关实体领域到一个字符串
PersonId
PersonName
PersonPhone
我有房子实体
HouseID
HouseType
HouseSize
两个实体与多对多的关系关系。 我需要将一个人(其中有许多房屋)的所有HouseType放入一个字符串中。
我有一个Person实体类似的东西LINQ到实体 - 得到所有相关实体领域到一个字符串
PersonId
PersonName
PersonPhone
我有房子实体
HouseID
HouseType
HouseSize
两个实体与多对多的关系关系。 我需要将一个人(其中有许多房屋)的所有HouseType放入一个字符串中。
您可以使用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);
你的意思是像?:
var data = context.People.Where(p => p.PersonId == <id>).SelectMany(p => p.Houses).Select(h => h.HouseType);
var result = string.Join(<separator>, data);
var houseTypes = person.Houses
.Select(i => i.HouseType).ToList();
return string.Join(" ", houseTypes.Select(x=>x.ToString()));
我houseType不如因此我得到一个错误“不能将隐式转换类型'字符串'转换为'short'” – Kulpemovitz 2012-02-02 13:32:11
@Kulpemovitz如果'HouseType'属性类型短,则可以使用'ToString()'转换为一个字符串。我更新了我的例子。 – 2012-02-02 13:49:16
太好了,但如果这个人没有房子,现在就会失败。但我仍然需要结果中的人 – Kulpemovitz 2012-02-02 13:57:33