У меня есть следующие классы:
Код: Выделить всё
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();
Поддерживаются только инициализаторы, члены сущностей и свойства навигации по сущности
Я также пытался использовать эти библиотеки, но все равно получаю исключение:
< 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();
Код: Выделить всё
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
Мобильная версия