53

助けてください。linqクエリで比較するためにDATEまたはDATETIMEを使用する方法を理解しようとしています。

例:今日より前に開始した人のすべての従業員名が必要な場合は、SQLで次のようにします。

SELECT EmployeeNameColumn
FROM EmployeeTable
WHERE StartDateColumn.Date <= GETDATE() //Today

しかし、linqはどうですか?

DateTime startDT = //Today

var EmployeeName =  
from e in db.employee
where e.StartDateColumn <= startDT 

上記のWHEREは機能しません:

例外の詳細:System.NotSupportedException:指定されたタイプメンバー'Date'は、LINQtoEntitiesではサポートされていません。初期化子、エンティティメンバー、およびエンティティナビゲーションプロパティのみがサポートされます。

4

11 に答える 11

86

DbFunctions時間部分をトリミングするためにクラスを使用します。

using System.Data.Entity;

var bla = (from log in context.Contacts
           where DbFunctions.TruncateTime(log.ModifiedDate) 
                              ==  DbFunctions.TruncateTime(today.Date)
           select log).FirstOrDefault();

ソース:http ://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/84d4e18b-7545-419b-9826-53ff1a0e2a62/

于 2012-03-09T23:25:10.757 に答える
21

それはうまくいくはずです。例外をトリガーしたクエリの別の部分がないことを確認しますか?フォームのクエリのインスタンスがいくつかあります

var query = from e in db.MyTable
            where e.AsOfDate <= DateTime.Now.Date
            select e;

私のコードで。

于 2009-07-06T17:32:52.050 に答える
10

データベース内の日付がNULL可能であることが原因である可能性があります。これを試して:

var EmployeeName =
from e in db.employee
where e.StartDateColumn.Value <= startDT 
于 2009-07-06T17:38:31.103 に答える
8

このように状態を確認できます

var nextDay = DateTime.Today.AddDays(1);

var query = from e in db.MyTable
            where e.AsOfDate >= DateTime.Today && e.AsOfDate < nextDay 
            select e;

ここでは、今日(00:00:00)と明日(00:00:00)の間をチェックするときに、AsOfDateの日付のレコードを取得します。今日の日付のレコードは、これまでの時間のみを取得します...

于 2011-07-06T13:22:13.967 に答える
5

.Dateは使用できません

今日を確認したい場合は、時間のない日時を作成できます

DateTime myDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
var e = (from mds in myEntities.Table
         where mds.CreateDateTime >= myDate
         select mds).FirstOrDefault();
于 2009-07-09T12:49:07.803 に答える
2

これを試して:

DateTime dd = DateTime.Parse("08/13/2010 00:00:00");
var data = from n in ContributionEligibilities
           where n.ModifiedDateTime.Date >= DateTime.Parse("08/13/2010").Date
           select n; 
data.Dump("Result") ;
于 2010-08-13T21:21:07.857 に答える
2

'Date'を渡すときに、というエラーメッセージが表示されます'DateTime'。それ'StartDateColumn'は実際にはデータベースで'Date'はなく、である可能性がありますか?'DateTime'それは比較を台無しにするかもしれません...

于 2009-07-06T17:33:39.600 に答える
1

LinqDataSourceを使用していますが、日付比較を含むクエリをエラーなしで実行するのに問題がありました。答えは、WhereAddParameters関数を使用して、厳密に型指定されたパラメーターとしてテスト値を追加することです。

以下の例を参照してください。ここでは、グループIDを照合し、レコード内のStopDateが現在の日付/タイムスタンプ以上であるかどうかを確認しています。

私は現在このコードフラグメントを使用していますが、それは魅力のように機能します。

LinqCampaigns.WhereParameters.Add("StopDate", System.Data.DbType.Date, DateTime.Now.ToString())
LinqCampaigns.Where = "GroupId = " & myGrp & " &&  " & "StopDate >= @StopDate"

チャームのように機能します。

于 2010-12-31T02:54:30.437 に答える
1

ローカル変数を使用して日付値を格納してから、その変数をクエリで使用します。

DateTime today = DateTime.Now.Date; from scheme in context.schemes where scheme.EndDate > today select scheme

于 2011-04-17T05:59:19.380 に答える
0

.Dateは機能しませんでしたが、.Dayは機能しました。

var query = from o in Payments
    where o.Order.OrderDate.Day != o.PaymentDate.Day
    orderby o.Order.OrderDate
    select new
    {
     o.Order.OrderID,
     o.Order.OrderDate,
     o.PaymentDate,      
     o.Order.FirstName,
     o.Order.LastName,
     o.Order.CustomerID
    };


query.Dump();
于 2012-02-24T22:06:42.503 に答える
0

次のようにnull値を確認してください。

 '(from mm in _db.Calls 
   where mm.Professionnal.ID.Equals(proid)
   && mm.ComposedDate.HasValue &&
   (mm.ComposedDate.Value >= datemin) && (mm.ComposedDate.Value <= date)
   select mm).ToArray();'
于 2012-12-21T10:09:29.143 に答える