簡體   English   中英

C#Linq SQL用戶定義函數上的位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM