2013-09-27 80 views
1

我們希望LINQ to Entities能夠處理絕對值函數。它似乎無法將linq轉換爲sql。我們正在使用.net 3.5。有沒有另外一種方式來表達這個查詢來使用Linq to Entities?我們正在使用的絕對值是實體/數據庫表的一部分。請參閱下面的代碼示例。LINQ to Entities無法識別方法'單個(單個)'方法

ListItemIds = sessionDB.ListItems 
.Where(x => x.ListItemId >= x.List.StartId && x.ListItemId <= x.List.EndId) 
.Where(x => (x.Dr != null)||(Math.Abs(x.Dr.Value) >= rangeDB)) 
.Select(x => x.ListItemId).ToList(); 
+0

我認爲你有一個小的邏輯埃羅r與你的'Math.Abs​​'無關,seccond where子句應該是「* .Where(x =>(x.Dr!= null)** && **(Math.Abs​​(x.Dr.Value)> = rangeDB))*「通過使用'||'你可以在'x.Dr.Value'上得到空引用(假設'Math.Abs​​'工作,pswg答案可能是解決方案) –

回答

3

在數學方面,|x| >= y是真,如果任一x >= y-x >= y(這相當於x <= -y),所以你可以只檢查Dr.Value的正值和負值。

但是,Scott是正確的;你檢查null的方式也是錯誤的。使用這個,如果你只是想記錄中,其中Dr財產Dr.Value是所提供的範圍內(即空的除外):

ListItemIds = sessionDB.ListItems 
    .Where(x => x.ListItemId >= x.List.StartId && x.ListItemId <= x.List.EndId) 
    .Where(x => (x.Dr != null)&&((x.Dr.Value >= rangeDB)||(x.Dr.Value <= -rangeDB))) 
    .Select(x => x.ListItemId).ToList(); 

或者,這對於記錄,其中DrDr.Value是所提供的範圍內(即空的都包括):

ListItemIds = sessionDB.ListItems 
    .Where(x => x.ListItemId >= x.List.StartId && x.ListItemId <= x.List.EndId) 
    .Where(x => (x.Dr == null)||(x.Dr.Value >= rangeDB)||(x.Dr.Value <= -rangeDB)) 
    .Select(x => x.ListItemId).ToList(); 
+0

我認爲OP發生了錯誤在空檢查上,它應該是一個'&&'不是'||',我只是說因爲它稍微改變了第二部分(它需要一個額外的括號)。 –

+0

@ScottChamberlain你是對的!我錯過了,謝謝。 –

相關問題