![](/img/trans.png)
[英]How to call an Sql User defined Function using Entity frame work Code first approach with LInq c#
[英]C# Linq Where on SQL User Defined Function
我在SQL數據庫中有一個用戶定義的函數 : db.GetMovements(cultureId)
。
當這樣調用時,它正確返回兩個值:
var movements = db.GetMovements(cultureId);
當我使用linq的.Where
在可為null的布爾對象Complete
,它返回零值-這是不正確的:
var movements = db.GetMovements(cultureId).Where(m => m.Complete != true).ToList();
但是,如果我將以上更改為:
var movements = db.Movements(cultureId).ToList();
movements = movements.Where(m => m.Complete != true).ToList();
然后,它正確返回1值。
為什么在第一個實例中使用.Where
不會產生任何結果?
用戶定義的函數不是存儲過程。 它有很大的區別。 就像帶有參數的視圖一樣, GetMovements
返回IQueryable
,因此Where
方法將轉換為SQL代碼。
如果Complete
值為NULL
,則所有比較操作將返回false。
NULL <> 1
返回false
https://technet.microsoft.com/zh-CN/library/ms191270(v=sql.105).aspx
db.Movements(cultureId).ToList();
將值具體化為.net對象,並且Nullable<bool>
工作原理不同:
null != true
返回true
我認為,您的代碼應如下所示:
var movements = db.GetMovements(cultureId).Where(m => m.Complete == null || m.Complete == false).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.