2009-11-20 4 views
5

LINQ-to-Entitiesクエリ式から直接書式設定された日付文字列を取得しようとしています。Linq-to-Entities:選択クエリ式の書式日付

nonBusinessDays = (from ac in db.AdminCalendar 
        where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
        select ac.MonthValue + "/" + ac.DayOfMonth + "/" + ac.FullYear).ToList(); 

しかし、私はfolloinwエラーメッセージが出ます:。 「タイプをキャストすることができません 『System.Nullable`1は』とタイプするには 『System.Objectの』 LINQのエンティティへの唯一のエンティティデータモデルのプリミティブ型のキャストがサポートされます。 "

結果セットを反復処理する以外にこれを行う方法はありますか? ありがとう! 阿部

答えて

9

私は1つの回避策が見つかりました:

nonBusinessDays = (from dt in 
          (from ac in db.AdminCalendar 
          where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
          select ac.DateTimeValue).ToList() 
        select string.Format("{0:M/d/yyyy}", dt)).ToList(); 
+1

あなたが抱えている問題は、その実行に有効なSQLにToStringメソッドを翻訳しようとするということですサーバー上で実行されていて、その操作が失敗しました。ネストされたクエリとは、実行可能なクエリから実行できない.ToStringを分離していることを意味します。 – Murph

+1

ありがとう! 今は意味があります。 LINQは関数をSQL関数にマップしようとしていますが、存在しません。 私の回避策は、まずデータをリストに入れてそこからリストを処理することでした。 – Abe

+0

レイジーローディングが原因です。 –

0

ToStringメソッドを使用するように選択を変更してみてください:

nonBusinessDays = (from ac in db.AdminCalendar 
        where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
        select ac.DateTimeValue.ToString("MM/dd/yyyy")).ToList(); 
+0

残念ながらToStringメソッドを実行することはできません。ここで例外があります: LINQ to Entitiesは、 'System.String ToString(System.String)'メソッドを認識せず、このメソッドをストア式に変換することはできません。 – Abe