3

我有一个像这样的映射类:

[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();

我得到一个NotSupportedExceptionLINQ to Entities 不支持指定的类型成员“QueuedToWHTime_DateTime”。仅支持初始化程序、实体成员和实体导航属性。

4

2 回答 2

5

您不能使用 EF 查询自定义属性。无法在 SQL 中翻译自定义属性。

您可以这样做以强制 orderby 在“内存中”完成。

var searchRslt = queryableNews
    .AsEnumerable()
    .OrderBy(m => m.QueuedToWHTime_DateTime)
    .ToList();
于 2012-08-20T10:43:48.860 回答
0

问题在这里:

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();
于 2012-08-20T11:28:28.343 回答