2017-05-04 148 views
0

我是一個初級開發者,並試圖轉換以下LINQ語句的T-SQL:轉換C#LINQ到T-SQL

var results = context 
     .Employees 
     .Where(item => (dateFilter.ToUpper() == "P") ? item.PublishedDate >= From : item.CapturedDate >= dateFromDT) 
     .Where(item => (dateFilter.ToUpper() == "P") ? item.PublishedDate <= dateTo : item.CapturedDate <= dateTo) 
     .FirstOrDefault() 

可以在一個幫幫我​​嗎?

Select * from Employees where PublishedDate = From and ....... 
+1

如果這已經在工作代碼,爲什麼不只是記錄它使用的SQL? –

+1

我實際上將c#api轉換爲sql存儲過程,所以我想轉換我不太確定我的where語句 – Clifford

+0

[如何將linq查詢轉換爲sql](http://stackoverflow.com/questions/6190620/how-to-convert-linq-query-to-sql) – Fabiano

回答

0

你可以使用類似這樣:

select top 1 * 
    from employees 
where (upper(DateFilter) = 'P' and PublishedDate >= From and PublishedDate <= dateTo) 
    or (upper(DateFilter) <> 'P' and CapturedDate >= dateFromDT and CapturedDate <= dateTo) 

如果DateFilter是在表中的列那麼最好是跳過,因爲它會降低性能(因爲你有一個指數上在那一欄上)。

+0

'upper'函數在這裏沒有任何區別。 –

+0

除非服務器排序規則區分大小寫(不是默認值),否則不需要使用upper。 –

0

我認爲它應該是這樣的。

Select Top 1 * from Employees 
    where 
(dateFilter = "P" COLLATE Latin1_General_CS_AS AND PublishedDate >= From AND PublishedDate >=dateTo) 
OR 
(dateFilter != "P" COLLATE Latin1_General_CS_AS AND CapturedDate >= dateFromDT AND CapturedDate >= dateTo) 
+0

....喜歡這些? '如果(@dateFilter)= 'P' \t \t \t \t開始 \t \t \t \t SET @凡= 'PublishedDate> = ''' +鑄造(@dateFrom爲varchar)+ ''」 AND PublishedDate> = '' '+ CAST(@dateFrom爲varchar)+' ''」 \t \t \t \t end' – Clifford

+0

@Clifford:爲什麼你的類型轉換你的'@ dateFrom'爲'varchar' –

+0

因爲我傳遞的日期,例如04/5/2017 – Clifford