2012-01-13 116 views
2

我想用LINQ表達式得到的結果,其中一列的值是NULL使用LINQ Lambda表達式獲取其值的列NULL

search.AddCriteria(x => x.LogStatus == 
Inventory.AffStatusToChar((EAffidavitLogStatus)byte.Parse(cmbLog.SelectedValue))); 

public void AddCriteria (Expression<Func<T, bool>> criteria) { 
     if (_where == null) { _where = w => true; } 
     _where = And(criteria); 
    } 


private Expression<Func<T, bool>> And (Expression<Func<T, bool>> expr) { 
     return Expression.Lambda<Func<T, bool>>(Expression.And(
       _where.Body, 
       Expression.Invoke(expr, _where.Parameters.Cast<Expression>()) 
      ), _where.Parameters); 
    } 

//This below part is use to execute the Linq 
//IQueryable<T> result = db.GetTable<T>(); 
//result = result.Where(_where); 

結果的,其中一部分是尋找像WHERE ([t0].[LogStatus]) = @p5) 看,我想IS NULL

我想查詢這樣

SQL query : `select * from xyz where abc is NULL` 

但LINQ表達上方轉換爲 select * from xyz where abc=NULL它給出了不同的結果。

任何一個經歷過這種問題?如何在LINQ表達式中實現IS NULL

+0

可能重複[轉換「爲空」成的LINQ to SQL語句(HTTP ://stackoverflow.com/questions/502328/converting-is-null-into-a-linq-to-sql-statement) – Ray 2012-01-13 10:15:50

+1

1那個問題沒有解決,第二個問題不是'表達式' – FosterZ 2012-01-13 10:17:44

+0

@射線: AddCriteria是一種用於過濾掉我的搜索的方法,此方法使用lamda表達式。現在'IQueryable result = db.GetTable ();'這給了我搜索結果 – FosterZ 2012-01-13 10:21:06

回答

0

別介意我想它自己這裏是我做過什麼

search.AddCriteria(x => !(x.LogStatus!=null)); 

這將返回查詢像

WHERE (NOT (UNICODE([t0].[LogStatus]) IS NULL)) 

田田的解決方案!這就是我期待..

+0

有趣。爲什麼雙重否定? – 2013-12-20 10:54:12

0

嘿,你可以檢查這個帖子(Linq and Nullable Values) OR (SQL ISNULL with LINQ)

你可以嘗試的

var user = from u in Users 
join uc in UserClients on u.Id equals uc.UserId 
into myuserwithclient 
from m in myuserwithclient.DefaultIfEmpty() 
select new { 
Id=u.Id, 
FirstName=u.FirstName, 
LastName=u.LastName, 
UserId=m.UserId, 
MobileNo = m.MobileNo ?? "N/A" 
}; 
var nullvalues = user.where(u=>u.MobileNo== "N/A");