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

NotSupportedException:指定された型メンバー 'QueuedToWHTime_DateTime' は、LINQ to Entities ではサポートされていません。初期化子、エンティティ メンバー、およびエンティティ ナビゲーション プロパティのみがサポートされています。

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 に答える