2013-01-16 53 views
0

我會鏈接將日期時間列轉換爲字符串。 這應該發生在數據庫實例中,如果我們使用System.Data.Objects.SqlClient.SqlFunctions 將追加相同的查詢並在數據庫中執行。Linq Sqlfunctions

在所有提示的帖子中,首先需要查詢然後我們需要選擇。在select中,我們可以使用.ToString()。而不是首先獲取記錄,我想在獲取時進行轉換。

我的要求。我有enity員工。

public class EmpEntities 
{ 
public string Id { get; set; } 
public DateTime CreatedDate { get; set; } 
} 

假設我的數據 EMP-19,2012-01-01 11:33:454 EMP-17,1999:06:06 12:44:898個

我的搜索標準是20,在所有領域的任何員工有20(含) 這我需要篩選屬性包含需要檢查。要做到這一點,我需要將我創建的日期列轉換爲linq中的字符串。

var query= 
(from ee in entities.Employee 
where ee.CreatedDate.Value.ToString().Contains("20") 
select ee).ToList(); 

如果我們使用上面的一個,它會通過錯誤。

如果我們使用下面的工作正常。

var query= 
    (from emp in entities.Employee       
     select emp) 
.AsEnumerable() 
.Where(x=>x.CreatedDate.Value.ToString().Contains("20")); 

我需要檢查包含實體的日期時間屬性。有沒有辦法將datetime屬性轉換爲字符串,並檢查linq中的包含。

我需要將我的datetime屬性轉換爲字符串,然後我需要使用包含。

所以在這裏我的問題是我想在數據庫級別 對數據進行篩選,例如像這樣 我準備爲僱員ID

var query= (from emp in entities.Employee.Where(x => System.Data.Objects.SqlClient.SqlFunctions.StringConvert((decimal?)x.Empid).Contains("20"))     
       select emp).ToList(); 

這相當於在SQL查詢。

SELECT 1 AS [C1], [Extent1].[name] AS [name] FROM [dbo].[Employee] AS [Extent1] 
WHERE STR(CAST([Extent1].[EmpId] AS decimal(19,0))) LIKE N'%5%' 

在SQL執行它被轉換整型到字符串並擷取該記錄執行的條件。

同樣我想過濾創建日期與empid。但我不能將日期時間列轉換爲字符串,以便我可以使用包含。

有沒有什麼辦法可以實現上面那個我爲整型數據類型所做的。

+1

我看不出標題或標籤如何匹配問題?它也沒有描述性,看起來像你想告訴的東西,而不是問它。 – TheGeekZn

+0

代碼更新請檢查一次。 – user1374303

+0

在你的整個問題中,我能看到你問的唯一的事情就是將'DateTime'轉換爲'string',這樣你就可以看到它是否包含任何東西。其中'string date = DateTime.ToString()'會有幫助。然後'if(date.contains ......)'。 – TheGeekZn

回答

0

隨着LINQ2SQL,你可以這樣做:

var query= 
    (from ee in entities.Employee 
    where SqlMethods.Like(ee.CreatedDate.Value.ToString() , "%20%") 
    select ee).ToList(); 

一定要問,爲什麼?我正在努力想出任何人會想要這樣的事情的任何可能的原因?

我相信你知道這將匹配日期像

1900-01-01 20:00:00 
1900-01-01 00:00:20 
1900-01-20 00:00:00 
1920-01-01 00:00:00 
2000-01-01 00:00:00 

等,等

+0

在下面的鏈接INQ實體顯然支持System.Data.Objects.SqlClient.SqlFunctions,但不是System.Data.Linq.SqlClient.SqlMethods.Like。 http://social.msdn.microsoft.com/Forums/en-US/lightswitch/thread/5ede2db0-a4f9-4178-84c0-fabf4d3a57fa – user1374303

1

有一個簡單的答案是:沒有。但我認爲sgmoore正確地指出了你方法的缺陷。 DateTime的字符串表示形式可以在任何地方包含一個字符串,所以它有多有用?

看起來你只是想選擇日期>= 2000-01-01可以通過

var d1 = new DateTime(2000,1,1); 
var query = from emp in entities.Employee 
      where emp.CreatedDate >= d1 
      select emp; 

做,請告訴我,如果這不符合你的意圖,爲什麼比賽LIKE %20%會的問題這麼多。如果是這樣,只有.AsEnumerable()的方法才能完成這項工作。