2011-08-31 99 views
2

我需要在C#中的大型數據庫上執行LINQ查詢。我需要在查詢中使用的一列是double。我需要省略此列中的小數點後4位以上的結果。該數據庫不能改變,因爲其他程序需要使用它,並利用我不想要的。然後將結果添加到列表中以供稍後使用。我認爲這會起作用。LINQ查詢,忽略具有特定小數點的結果

where fun.Units != '*.?????*' 

但是,它返回字符文字中字符太多的錯誤。 整個查詢看起來是這樣的,到目前爲止

var clientQuery1 = from cli in main1.Clients 
        from pol in main1.Policies 
        from fun in main1.FundHoldings 
        from uni in main1.UnitPrices 
        where cli.AccountNumber == accNum 
        && pol.ClientRef == cli.ClientRef 
        && fun.FKeyRef == pol.PolicyRef 
        && uni.UnitPriceRef == fun.UnitPriceRef 
        && fun.Units != '*.?????*' 
        select uni.UnitName; 
+1

'SqlMethods.Like'(也許) –

+0

發錯在我的崗位,這不是一個小數這是一個雙 –

+0

@Stuart:在這種情況下,它不是真正意義的談論有多少*小數*數字是得到。例如,當您用十進制表示它時,與「0.1」最接近的兩倍具有*手數*位數。 –

回答

0

你可以請嘗試下面這個查詢,讓我知道。

var clientQuery1 = from cli in main1.Clients 
        from pol in main1.Policies 
        from fun in main1.FundHoldings 
        from uni in main1.UnitPrices 
        where cli.AccountNumber == accNum 
        && pol.ClientRef == cli.ClientRef 
        && fun.FKeyRef == pol.PolicyRef 
        && uni.UnitPriceRef == fun.UnitPriceRef 
        && fun.Units == Math.Round(Convert.ToDouble(fun.Units),4) 
        select uni.UnitName; 
+0

獲取最佳重載方法匹配的錯誤對零件Math.Round(fun.Units,4) –

+0

有無效的爭論請嘗試此查詢。它會完美地工作。 – sikender

+0

謝謝!它改變了(Convert.ToDouble(fun.Units),4)到(fun.Units.Value,4),因爲它已經是一個double(在原文中犯了一個錯誤)。歡呼的幫助! –

1

那麼你可以特別錯誤使用解決

&& fun.Units != "*.?????*" 

注意從單引號雙引號的變化。但是,這不會對你有所幫助。 LINQ中fun.Units的類型是什麼?如果是小數,你可能可以使用:

&& decimal.Round(fun.Units, 4) == fun.Units 

...但它不是很清楚,我什麼會在生成的SQL做。值得一試,但即使它有效,你也應該看到SQL的外觀。

+0

我懷疑這一輪不會工作,因爲我認爲SQL將隱式地將兩個操作數強制轉換爲WHERE CAST(單位爲Decimal(18,4))=單位爲Decimal(18,4) –

+0

@Ben:是的,這就是一個明顯的可能性這是我最好的建議... –

+0

我錯了它的工作,我試過'SELECT * FROM SomeTable WHERE CAST(值爲十進制(18,1))<>值'其中值字段是SQL 2008 R2數據庫上的Decimal(18,2)類型,它確實返回行。 –