2017-05-04 10 views
0

私は中学開発者だとT-SQLに次のLINQ文で変換しよう:コンバートC#のLINQ

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

あなたは、これに似たような使用することができますDateFilterは表の列であれば、それはパフォーマンスが低下する可能性として、あなたがインデックスを持っていることを考える(上をスキップすることをお勧めし

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) 

をその列に)。

+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場合は、= 'PublishedDate> = ''' + CAST(@dateFrom varchar型として)+ ''」AND PublishedDate> = '' \t \t \t \tのSET @を開始します'+ CAST(@dateFrom varchar型など)+' '' end' – Clifford

+0

\t \t \t \t @Cliffordを」:あなたは私が日付を渡しているので、あなたの '@ dateFrom' varchar' –

+0

'にキャストタイプ、たとえば04である理由/ 5/2017 – Clifford