0

私はこのクエリを持っています:

var q = from p in DB.treatments
    where p.start >= start && p.end <= end
    select p;

そして、データベースでは、最後に2012年6月14日午前12:00と表示されます。これには、6月15日になる直前の6月14日全体が含まれていると思われます。

したがって、endパラメーターを06/14/2012 04:00 pmで送信すると、何も返されません。それが06/15/2012の場合のみですが、15ではなく14で終日検索する必要があります。

だから私は14の一日を検索したいのですが、14を選択すると、日時はこの2012年6月14日午前12:00を返します。

どうすればいいのですか?

4

2 に答える 2

3

とのDateプロパティを比較する必要があります。startend

 var q = from p in DB.treatments
         where p.start >= start.Date && p.end <= end.Date
         select p;

その場合start.Dateは、プロパティを使用するとき6/14/2012 4:00 PMに比較するだけです。6/14/2012Date

于 2012-06-14T14:49:32.853 に答える
0

.Dateと比較する必要があります。データベースに対してクエリを実行している場合、.Date関数はSQLに変換できないため、機能しません。

オブジェクトへのLINQの使用

var q = from p in DB.treatments
    where p.start >= start.Date && p.end <= end.Date
    select p;

LINQtoSQLまたはLINQtoENTITIESの場合

var startDate = start.Date;  
var endDate = end.Date;  
var q = from p in DB.treatments  
        where p.start >= start && p.end <= end  
        select p;  

更新: .NET 4.0以降が使用されている場合は、エンティティ関数TruncateTimeを使用できます。何かのようなもの:

var q = from p in DB.treatments
    where EntityFunctions.TruncateTime(p.start) >= EntityFunctions.TruncateTime(start)      
        && EntityFunctions.TruncateTime(p.end) <= EntityFunctions.TruncateTime(end)
    select p;
于 2012-06-14T16:12:59.953 に答える