2016-09-10 23 views
1

我有一個字符串列的數據庫,用這種格式指示日期時間值:yyyyMMdd。C#LINQ日期時間在一個字符串值

例如值20160908指示Semptember 2016

的08我有兩個的DateTimePicker爲濾波器dateFrom和dateTo值。我把我的日期選擇器的文本框的日期時間值這個簡單的代碼:

DateTime dataFromSel = Convert.ToDateTime(txtDatFrom.Text); 
DateTime dataToSel = Convert.ToDateTime(txtDatTo.Text); 

我的查詢是:

var query = from c in snd.WineOWines.OrderByDescending(x => x.DDT_DATA) 
    select new 
    { 
     c.ID, 
     c.VABRMA, 
     c.VABNCL, 
     c.DDT_DATA, 
    }; 

如果我有一個日期時間過濾器我添加以下代碼:

if (txtDatDa.Text != "") 
{ 
    string dataDaSel = Convert.ToDateTime(txtDatDa.Text).ToString("yyyyMMdd"); 
    int dataDa = Convert.ToInt32(dataDaSel); 
    query = query.Where(x => int.Parse(x.DDT_DATA) >= dataDa); 
} 

問題是,我不能在過濾器之前列出查詢,因爲我有很多行,如果我使用此查詢,我不能在LINQ語句中執行int.parse。

如何編寫一個LINQ語句,選擇我的數據庫中的行與日期時間之間從和到,如果列中的值是一個字符串?現在我的查詢工作正常,但我需要一個where子句爲此問題。

感謝所有

+0

LINQ到什麼地步? EF6? EF核心?其他? –

+0

請分享您在這裏的查詢 –

回答

2

如果日期有你不需要投他們爲int相同的格式。 你應該能夠比較叮咬和刪除投...

if (!string.IsNullOrEmpty(txtDatDa.Text)) 
{ 
    string dataDaSel = Convert.ToDateTime(txtDatDa.Text).ToString("yyyyMMdd"); 
    var res = query.Where(x => string.Compare(dataDaSel, x.Name) <= 0); 
} 

LINQ到SQL支持string.Compare這裏描述 https://social.msdn.microsoft.com/Forums/en-US/98180ae0-4ccd-4ecd-89d5-576a04169219/linq-to-entities-with-string-comparison?forum=adodotnetentityframework

+0

如果我嘗試它,我有一個錯誤:「這是不可能應用運算符'> ='鍵入字符串和字符串」 –

+0

答案已更改...我用string.compare並應該正常工作 – Grappachu

1

你不必把(字符串,字符串) int.Parse,你可以做一個直接的字符串比較,它會正常工作。你都不得不將你的dataDaSel轉換成整數。

if (txtDatDa.Text != "") 
{ 
    string dataDaSel = Convert.ToDateTime(txtDatDa.Text).ToString("yyyyMMdd"); 
    query = query.Where(x => x.DDT_DATA >= dataDaSel); 
} 

例如,

"20120201" >= "20120201" // true 
"20120101" >= "20120201" // false 
"20120301" >= "20120201" // true 

只要你保持格式爲yyyyMMdd它即使使用字符串也能正常工作。

+0

如果我嘗試它,我有一個錯誤:「這是不可能應用運算符'> ='鍵入字符串和字符串」 –

相關問題