EF 4: указанный тип члена '*' не поддерживается в LINQ to Entities
У меня есть такой класс:
[Table("MyTable")]
class MyClass
{
//properties; id, name, etc...
private string _queuedToWHTime = string.Empty;
[Column("QueuedToWHTime")]
public string QueuedToWHTime
{
get { return _queuedToWHTime; }
set { _queuedToWHTime = value; }
}
public DateTime? QueuedToWHTime_DateTime
{
get
{
if (!string.IsNullOrWhiteSpace(_queuedToWHTime))
{
return Convert.ToDateTime(_queuedToWHTime);
}
return null;
}
}
}
и таблица (MyTable):
CREATE TABLE webnews_in
(
Id INT NOT NULL auto_increment,
QueuedToWHTime VARCHAR (50) NULL
...
PRIMARY KEY (Id)
);
когда я пытаюсь сделать запрос вот так:
var searchRslt=(from m in queryableNews
orderby m.QueuedToWHTime_DateTime descending
select m).ToList();
Я получил NotSupportedException
: Указанный член типа 'QueuedToWHTime_DateTime' не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей.
2 ответа
Вы не можете запросить с EF на пользовательских свойств. Пользовательское свойство не может быть переведено в SQL.
Вы можете сделать это, чтобы заставить заказ быть выполненным "в памяти".
var searchRslt = queryableNews
.AsEnumerable()
.OrderBy(m => m.QueuedToWHTime_DateTime)
.ToList();
Вопрос здесь:
var searchRslt=(from m in queryableNews
orderby m.QueuedToWHTime_DateTime descending
select m).ToList();
вы пытаетесь использовать собственность .QueuedToWHTime_DateTime
, но это не существует в базе данных. Вам нужно использовать имена, которые используются в базе данных. В этом случае .QueuedToWHTime
Так:
var searchRslt=(from m in queryableNews
orderby m.QueuedToWHTime descending
select m).ToList();
Если свойство базы данных в этом сценарии не используется, вам придется извлечь весь список, преобразовать его в IEnumerable (любой подойдет), а затем отфильтровать / упорядочить этот IEnumerable по его свойству.
Что-то вроде этого:
var result = queryableNews.ToList().OrderbyDescending(x=>x.QueuedToWHTime_DateTime).ToList();