簡體   English   中英

使用LINQ在兩個日期和時間之間進行搜索

[英]Using LINQ to search between two Dates and Times

我目前正在使用2種方法進行搜索。 我運行一個存儲過程,在兩個日期之間提取信息。 隨后在這些結果中進行LINQ搜索。

基本上,用戶使用可選的時間參數選擇開始日期和結束日期。 例如,用戶選擇開始日期01/01/2014 11am到01/03/2014 3pm。 問題是因為搜索分為兩個階段,它將搜索開始日期和結束日期之間的所有行。 然后LINQ搜索那些時間,然后將其限制在每天上午11點到下午3點之間。

出於某種原因,我似乎無法解決如何解決這個問題。 這是我的應用程序中的代碼...

var model = db.Results(startDate, endDate)
            .Where(r => startTime == null || r.A_Time >= startTime)
            .Where(r => endTime == null || r.A_Time <= endTime)
            .OrderBy(r => r.A_Time)
            .OrderBy(r => r.A_Date)
            .Take(1000)
);

根據要求,db結構如下。

TABLE [dbo].[TablewithInfo](
    [A_Date] [date] NOT NULL,
    [A_Time] [time](7) NOT NULL,
    [Site] [varchar](50) NOT NULL,
    [Event] [varchar](50) NULL,
    [Client] [varchar](25) NOT NULL,
    [User] [varchar](50) NULL,
    [Host] [varchar](50) NOT NULL,
    [Info] [varchar](2800) NOT NULL)

你可以使用這樣的邏輯:

.Where(row => startTime == null || row.A_Date > startDate || (row.A_Date == startDate && row.A_Time >= startTime))

因此,無論是否指定時間,日期都在當前日期之后(時間無關緊要),或者它是相同的日期,時間是晚些時間。

以下查詢正在執行的操作是多余但必要的:

var sdt = CombineParameters(startDate, startTime);
var edt = CombineParameters(endDate, endTime);

var model = db.Results(startDate, endDate)
            .Where(r => (CombineParameters(r.A_Date, r.A_Time) >= sdt))
            .Where(r => (CombineParameters(r.A_Date, r.A_Time) <= edt))
            .OrderBy(r => r.A_Time)
            .OrderBy(r => r.A_Date)
            .Take(1000)
);


// Date and Time classes below are only examples, they do not exist
// Prolly you are using string ;)
private DateTime CombineParameters(Date dt, Time tt)
{
    // some way to combine dt and tt to DateTime
    // you might have to do NULL checks here etc.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM