Вычисляемые свойства и Entity FrameworkC#

Место общения программистов C#
Ответить
Anonymous
 Вычисляемые свойства и Entity Framework

Сообщение Anonymous »

У меня проблема с запросом linq.
У меня есть следующие классы:

Код: Выделить всё

public abstract class Subject : IValidatableObject
{
public abstract string FullName { get; }

public abstract SubjectType SubjectType { get; }

public string FiscalIdentifier => String.IsNullOrEmpty(VatNumber) ? FiscalCode : VatNumber;
}

[Table("Person")]
public partial class Person : Subject
{
public override string FullName => FirstName + " " + LastName;

public override SubjectType SubjectType => SubjectType.Person;

public string FirstName { get; set; }
public string LastName { get; set; }
}

[Table("Corporation")]
public partial class Corporation : Subject
{
public override string FullName => Name;

public override SubjectType SubjectType => SubjectType.Corporation;

public string Name { get; set; }
}
Когда я запускаю этот запрос:

Код: Выделить всё

 IQueryable result = GetList()
.OrderBy(s => s.FullName)
.Skip(start)
.Take(length)
.ToList();
Entity Framework отображает ошибку:

Поддерживаются только инициализаторы, члены сущностей и свойства навигации по сущности

Я также пытался использовать эти библиотеки, но все равно получаю исключение:

< strong>DelegateDecompiler: невозможно привести тип «OneData.DataModel.Subject» для ввода «OneData.DataModel.Person». LINQ to Entities поддерживает приведение только примитивных или перечисляемых типов EDM.

Код:

Код: Выделить всё

public abstract class Subject : IValidatableObject
{
[Computed]
public abstract string FullName { get; }

[Computed]
public abstract SubjectType SubjectType { get; }

[Computed]
public string FiscalIdentifier => String.IsNullOrEmpty(VatNumber) ? FiscalCode : VatNumber;
}

IQueryable result = GetList()
.OrderBy(s => s.FullName)
.Skip(start)
.Take(length)
.Decompile()
.ToList();
Linq.Translations: элемент с таким ключом уже добавлен.

Код: Выделить всё

public partial class Person : Subject
{
private static readonly CompiledExpression
 FullNameExpression
= DefaultTranslationOf.Property(e => e.FullName).Is(e => e.FirstName + " " + e.LastName);

public override string FullName => FullNameExpression.Evaluate(this);
}

public partial class Corporation : Subject
{
private static readonly CompiledExpression FullNameExpression
= DefaultTranslationOf.Property(e => e.FullName).Is(e => e.Name);

public override string FullName => FullNameExpression.Evaluate(this);
}
Спасибо за любые идеи.
Фабрицио

Подробнее здесь: https://stackoverflow.com/questions/520 ... -framework
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»