Update:C# LINQ к SQL объединения нескольких строк
Существует еще одна таблица называется Местоположение специальных знаков. Он содержит сохраненный идентификатор местоположения и специальные знаки. Необходимо сделать результат в переменной SpecialSignsLocation и получить следующее:
public IEnumerable<KeyValuePair<int, int>> SpecialSignsLocation = new List<KeyValuePair<int, int>>();
//json result
...
SpecialSigns: {
BodyType: [1, 2],
Hair: [3, 1, 2],
SpecialSignsLocation: [[1,2], [3,5], [4,1]]
}
...
//query
SpecialSignsLocation = entity.persons_signs_location
.Where(c => c.PersonId == persons.Id)
.Select(s => new { s.Location, s.Sign})
.ToDictionary(l => l.Location, l => l.Sign)
Я написал запрос, но я пролетает исключение:
Expression LINQ к Entities не распознает метод системы. Collections.Generic.Dictionary
Есть 3 стола: Персоны, ПерсоныSignsHair, ПерсоныSignsBodyType. Один человек может иметь много специальных знаков:
public List<object> GetPerson(int id)
{
var query = (from persons in entity.persons where persons.Id.Equals(id)
join signs_body_type in entity.persons_signs_body_type
on persons.Id equals signs_body_type.PersonId into _signs_body_type
from signs_body_type in _signs_body_type.DefaultIfEmpty()
join signs_hair in entity.persons_signs_hair
on persons.Id equals signs_hair.PersonId into _signs_hair
from signs_hair in _signs_hair.DefaultIfEmpty()
select new Person
{
PersonName = persons.PersonName,
PersonLastName = persons.PersonLastName,
PersonPatronymic = persons.PersonPatronymic,
SpecialSigns = new PersonSpecialSigns()
{
BodyType = _signs_body_type.Select(c => c.PersonBodyType),
Hair = _signs_hair.Select(h => h.PersonHair)
}
});
return query.ToList<object>();
}
После запроса, результат преобразуется в формат JSON. Выход, я ожидаю следующий результат:
[
{
SpecialSigns: {
BodyType: [1, 2],
Hair: [3, 1, 2]
},
PersonName: "Aaa",
PersonLastName: "Bbb",
PersonPatronymic: "Ccc",
},
]
Вместо этого результат дублируется 6 раз.
[
{
SpecialSigns: {
BodyType: [1, 2],
Hair: [3, 1, 2]
},
PersonName: "Aaa",
PersonLastName: "Bbb",
PersonPatronymic: "Ccc",
},
{
SpecialSigns: {
BodyType: [1, 2],
Hair: [3, 1, 2]
},
PersonName: "Aaa",
PersonLastName: "Bbb",
PersonPatronymic: "Ccc"
},
{
SpecialSigns: {
BodyType: [1, 2],
Hair: [3, 1, 2]
},
PersonName: "Aaa",
PersonLastName: "Bbb",
PersonPatronymic: "Ccc"
},
{
SpecialSigns: {
BodyType: [1, 2],
Hair: [3, 1, 2]
},
PersonName: "Aaa",
PersonLastName: "Bbb",
PersonPatronymic: "Ccc"
},
{
SpecialSigns: {
BodyType: [1, 2],
Hair: [3, 1, 2]
},
PersonName: "Aaa",
PersonLastName: "Bbb",
PersonPatronymic: "Ccc"
},
{
SpecialSigns: {
BodyType: [1, 2],
Hair: [3, 1, 2]
},
PersonName: "Aaa",
PersonLastName: "Bbb",
PersonPatronymic: "Ccc"
}
]
Вопрос: Как объединить специальные идентификаторы, и привести их в массив?
Пожалуйста, включите результат, который вы получите также. – wdosanjos
@wdosanjos Я думаю, что он был достаточно ясным: * результат дублируется 6 раз * – meJustAndrew
Если вам нужна только одна запись, вы можете сделать 'FirstOrDefault()' –