2016-10-11 12 views
1

剣道UIを使用してasp.net MVCシステムを開発しています。私はビューのフィルタボタンから "日付"をコントローラに送信し、LINQをフィルタリングする必要があります。私はこのコードを使用しました:null可能なdatetimeをLINQ asp.net MVCの文字列に変換中にエラーが発生しました。

public ActionResult Grid_ReadLogAdminList([DataSourceRequest] DataSourceRequest request, string filterDate) 
     { 
      DateTime _temp; 
      if (!DateTime.TryParse(filterDate, out _temp)) 
       _temp = DateTime.Now; 

      return Json(_context.Entities<LogAdmin>().NoTracking().OrderByDescending(l => l.TimeStamp) 
       .Where(f => f.TimeStamp.Value.ToString("dd.MM.yyyy") == _temp.ToString("dd.MM.yyyy")) 
       .Select(l => new LogAdminInfo 
       { 
        Id = l.Id, 
        Message = l.Message, 
        MessageTemplate = l.MessageTemplate, 
        Level = l.Level, 
        TimeStamp = l.TimeStamp, 
        Exception = l.Exception, 
        Properties = l.Properties, 
        LogEvent = l.LogEvent, 
       }) 
       .ToDataSourceResult(request)); 
     } 

しかし、それは私に ".Where"のエラーを与えました。 TimeStampフィールドが "datetime"であることを知っておく必要があります。 null可能なdatetime。

私はこのエラーを受け取っ:

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

は、どのように私は、エラーを修正できますか?

+0

あなたが最初にあなたの日付を確認する必要があるがnullの場合か否か。 –

+0

私はそれをやろうとしました。 ( "d.d.MM.yyyy")):== _temp.ToString( "dd.MM.yyyy"))。 ...うまくいきませんでした –

+2

T-SQLに変換できなかったため、Linqがエンティティに認識できませんでした。ここをクリックしてください:http://stackoverflow.com/a/34061692/2946329 –

答えて

1

.Where(f => f.TimeStamp.Value.ToString("dd.MM.yyyy") == _temp.ToString("dd.MM.yyyy")) 

を置き換えるエラーがToStringメソッドをサポートしていない、あなたは別のアプローチを使用してあなたの日付を比較する必要があるエンティティへのLINQはかなり指標です。私はあなたがDbFunctions.TruncateTime Methodを試してみることをお勧めので、あなたは比較のためのDateTimeの日付部分にのみ関心があると仮定し、あなたのコードに基づいて

Where(f => DbFunctions.TruncateTime(f.TimeStamp) == DbFunctions.TruncateTime(_temp)) 
+0

ありがとうございます –

1

.Where(f => DbFunctions.TruncateTime(f.TimeStamp) == _temp) 
0
var tempDate = _temp.ToString("dd.MM.yyyy")  
    Json(_context.Entities<LogAdmin>().NoTracking().OrderByDescending(l => l.TimeStamp)  
.Select(l => new LogAdminInfo 
        { 
         Id = l.Id, 
         Message = l.Message, 
         MessageTemplate = l.MessageTemplate, 
         Level = l.Level, 
         TimeStamp = l.TimeStamp.Value.ToString("dd.MM.yyyy"), 
         Exception = l.Exception, 
         Properties = l.Properties, 
         LogEvent = l.LogEvent, 
        }).Where(l => l.TimeStamp = tempDate).Select(l) 
        .ToDataSourceResult(request)); 
関連する問題