Ответ 1
Я не пробовал это, но сообщение об ошибке дает вам ключ: вы не устанавливаете одинаковые свойства в том же порядке в обоих местах.
Что произойдет, если вы попытаетесь установить свойство ID на внешнем элементе Member()?
Я пытаюсь создать иерархическую коллекцию с использованием Entity Framework - см. ниже запрос - каждый член в данной компании имеет родительский элемент, но при попытке выполнить это я получаю следующее исключение:
System.NotSupportedException: тип "Член" появляется в двух структурно несовместимые инициализации внутри один запрос LINQ to Entities. Тип могут быть инициализированы в двух местах в тот же запрос, но только если тот же свойства устанавливаются в обоих местах и эти свойства задаются в одном и том же заказ.
Если я удалю назначение ParentMember, это работает - любые идеи о том, что происходит?
return from c in _Entities.Company
where c.Deleted == false
select new Member()
{
Name = c.Name,
ParentMember = new Member()
{
Name = c.ParentMember.Name
}
};
Я не пробовал это, но сообщение об ошибке дает вам ключ: вы не устанавливаете одинаковые свойства в том же порядке в обоих местах.
Что произойдет, если вы попытаетесь установить свойство ID на внешнем элементе Member()?
Try
return (from c in _Entities.Company
where c.Deleted == false
select new
{
c.Name,
ParentMember = new
{
c.ParentMember.Name
}
})
.AsEnumerable()
.Select(c=> new Member
{
Name = c.Name,
ParentMember = new Member
{
Name = c.ParentMember.Name
}
});
В результате вы получите рекурсию записей элементов, когда вы попытаетесь получить одни и те же поля в каждом из них. Вы не можете просто сделать последнюю родительскую запись равной нулю.
Я хотел бы получить то, что мог, а затем создать запись с дальнейшими запросами. Обратите внимание, что для вашей компании требуется поле ParentId или подобное.
var members =
return from c in _Entities.Company
select new Member()
{
Name = c.Name,
ParentId = c.ParentId
};
Теперь повторите и добавьте родительские записи.
foreach (var member in members)
{
member.ParentMember = new Member
{
Name = _Entities.Company.First(c => c.Id == member.ParentId).Name
};
}