LINQ to Entities - получить все связанные поля сущностей в строку - PullRequest
1 голос
/ 02 февраля 2012

У меня есть Лицо-сущность, что-то в этом роде

PersonId
PersonName
PersonPhone

У меня есть Дом-сущность

HouseID
HouseType
HouseSize

Обе сущности связаны многими со многими.Мне нужно, чтобы в строке был указан весь тип дома для человека (у которого много домов).

Ответы [ 3 ]

0 голосов
/ 02 февраля 2012

Вы имеете в виду что-то вроде?:

var data = context.People.Where(p => p.PersonId == <id>).SelectMany(p => p.Houses).Select(h => h.HouseType);
var result = string.Join(<separator>, data);
0 голосов
/ 02 февраля 2012
var houseTypes = person.Houses
    .Select(i => i.HouseType).ToList();

return string.Join(" ", houseTypes.Select(x=>x.ToString()));
0 голосов
/ 02 февраля 2012

Вы можете легко объединить несколько строк из последовательности с помощью метода Enumerable.Aggregate .

В вашем случае вам придется сначала project список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);

который вернет пустую строку , когда последовательность houseTypes пуста.

Обновление:

Если вы используете Entity Framework 4или выше, вы можете использовать одну из встроенных функций SQL , чтобы выполнить преобразование в строку непосредственно в базе данных:

var houseTypes = person.Houses
                       .Select(i => SqlFunctions.StringConvert((double)i.HouseType))
                       .AsEnumerable()
return String.Join(", ", houseTypes);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...