2012-05-31 51 views
2

我有我無法弄清楚如何轉化爲LINQ翻譯SQL喜歡的LINQ to SQL

(p.prioid LIKE '1%' OR p.prioid LIKE '2%' OR p.prioid LIKE '3%') 

以下SQL片段我嘗試這樣的:

(p.prioid.Contains(1) || p.prioid.Contains(2) || p.prioid.Contains(3)) 

但收到以下錯誤信息:「不能從int轉換爲字符串」

我檢查了表和1,2和3是int數據類型,所以我不認爲它會正常工作,如果我通過將字符串轉換爲字符串引號。

+1

在執行任何字符串比較操作([ICompare](http://msdn.microsoft.com/zh-cn/library/system))之前,需要將整型轉換爲字符串('.ToString()')。 collections.icomparer.aspx)) – SliverNinja

回答

2

LIKE纔會使用提供的字符串數據,即使你在其他數據類型搜索工作。

如果您注意到,即使在SQL中,您也將它們作爲字符串提交。

p.prioid LIKE '1%' OR p.prioid LIKE '2%' OR p.prioid LIKE '3%' 

快速修復將使用.ToString()並提交您的查詢。

(p.prioid.Contains(1.ToString()) || p.prioid.Contains(2.ToString()) || p.prioid.Contains(3.ToString())) 

我想這將使用某種變量而不是像例子那樣的固定值。

+0

@ Mohammed ElSayed:反對接受 \t LIKE只會使用提供的字符串數據。即使您在其他數據類型中搜索也是如此。 如果您注意到,即使在SQL中,您也將它們作爲字符串提交。。你是對的。我甚至沒有注意到這一點。我被固定在prioid是一個int數據類型的事實上。這會導致更多的混淆。如果數據字段是一個int,但SQL語句正在查找一個字符串,那麼該如何工作?另外,做一個「p.prioid.Contains(1.ToString())」和做p.prioid.Contains(「1」)是否有區別? –

+0

這兩個示例之間沒有區別,因爲它們將評估爲相同的SQL語句。 上傳:什麼是下投票接受?你是這樣做還是別人? 順便說一句,我們都在這裏互相幫助,我們都會說一些錯誤的信息或者會面臨我們不知道的事情。所以不用擔心,我只是想幫助你。你已經解決了你的問題。 –

+0

我不知道Down投票接受是什麼意思。我點擊「這個答案很有用」,並點擊複選標記作爲我接受的答案。你沒有說錯或給我任何錯誤的信息。相反,你非常有幫助,我非常感激。 –

2

試試這個:

(p.prioid.ToString().StartsWith("1") || p.prioid.ToString().StartsWith("2") || p.prioid.ToString().StartWith("3")) 

快速正骯髒:)

+0

@ jonnyGold:謝謝你的幫助 –

+0

不客氣,先生。 – bluevector