2017-10-04 5 views
-3

私のデータベースにはこの「timein」と「timeout」が文字列形式であり、ロジックがわからないので助けが必要です。このようなMVCの文字列と時刻との比較<= > =

何か:

 Entity.time a; 

     using (var b = new Entity.DatabaseEntities()) 
     { 
      a = b.times.Where(v => Convert.ToDateTime(v.timein) <= Convert.ToDateTime(DateTime.Now.ToString("hh:mm")) && Convert.ToDateTime(v.timeout) >= Convert.ToDateTime(DateTime.Now.ToString("hh:mm"))).FirstOrDefault(); 

     }   

答えて

0

timeintimeoutは、データベースの種類Timeと.NET型TimeSpanに適しだろう。文字列がHH:mmの形式であると仮定すると、文字列の比較を行い、クエリ内の何も変換しないでください。そのようにクエリはSARGableです。彼らが別のフォーマットになっている場合、いくつかのサンプルデータで質問を更新する必要があります。

クエリが機能しない理由は、式がSQL文に変換できる必要があり、すべてではない(実際にはほとんどの型/メソッド)が変換できないためです。

Entity.time a; 
using (var b = new Entity.DatabaseEntities()) 
{ 
    var timeOfDay = DateTime.Now.ToString("HH:mm"); 
    a = b.times.FirstOrDefault(v => 
     string.Compare(v.timein, timeOfDay) >= 0 
     && string.Compare(v.timeout, timeOfDay) <= 0); 
} 

サポートされている標準的なメソッド/関数の一覧については、Canonical Functionsを参照してください。

string.Compareも参照してください。そうすれば、その動作を理解できます。

+0

問題を理解するのを手伝ってくれてありがとう、Mr @Igorさん – Amits