2009-05-19 4 views
2
DateTime列 のうち

取得値はnullの場合:式 'テーブル(Product).Select(p => new <> f__AnonymousType0 1(selldate = IIF((p.SellEndDate = null), Invoke(value(System.Func 1 [System.String]))、p.SellEndDate.Value.ToShortDateString()))))')をSQLに変換できず、それを処理できませんでしたローカル表現として。LINQのエラー

答えて

3

基本的には、LINQ to SQLがクエリ全体を取り込み、SQL Serverが理解できるものに変換しようとしているということです。ただし、SQL ServerにDateTime.ToShortDateStringの概念がないため、SQLへの変換が失敗するという問題があります。

SellEndDate(これはNullable<DateTime>となります)を選択するようにクエリを変更する必要があります。そのクエリの結果を使用すると、文字列に変換できます。たとえば、

var list = (from p in Products 
      select p.SellEndDate).ToList(); 

// calling ToList() above means we have the entire resultset in memory and 
// no longer have to pass the query back to SQL Server 

var stuff = from p in list select new 
{ 
    selldate = p.SellEndDate == null ? 
        string.Empty : 
        p.SellEndDate.Value.ToShortDateString() 
}; 
+0

これは、ように私をやってしまった: するvar照会可能=製品のpから \t \t \t \t let Date =(p.SellEndDate.Value!= null)? p.SellEndDate.Value.ToShortDateString():String.Emptyを \t \t \t \t \t \t \t新しい \t \t \t \t \t \t \t \t \t { \t \t \t \t \t \t \t \t \t \t SellDate =日付を選択 \t \t \t \t \t \t \t \t \t} が動作します。 – Sreedhar

+1

うわー、それはSQLに向かい、ToShortDateStringのような関数を実行するときにC#に戻ってくるようです。 – shahkalpesh

+1

ToList()を呼び出す必要はありません。AsEnumerable()を呼び出すことができます。それはローカル実行を使用するのに十分です。 –

1

ToShortDateStringと同等のSQL変換がないようです。
代わりにToStringを使用してください。

1

日付時刻フィールドには、NULLを許可する場合:

from order in repository.Order 
    select order.OrdShipDate == null ? "" : order.OrdShipDate.GetValueOrDefault(DateTime.Now).Month.ToString() + "/" + order.OrdShipDate.GetValueOrDefault(DateTime.Now).Day.ToString() + "/" + order.OrdShipDate.GetValueOrDefault(DateTime.Now).Year.ToString(); 

日付時刻フィールドがNULLを許可しない場合:

from order in repository.Order 
    select order.OrdShipDate.Month.ToString() + "/" + order.OrdShipDate.Day.ToString() + "/" + order.OrdShipDate.Year.ToString();