2011-08-19 61 views
0

我正在實施一個搜索,將採取六個可能的(但不是必需的)用戶輸入,然後嘗試將它們匹配到一些實體。Linq到實體搜索算法

我認爲我遇到的問題是EF和SQL Server認爲空值是兩個完全不同的東西。

想法:選擇一個實體,其中columnA =(如果columnA爲null,則columnA(或null)else searchTerm)。搜索條件是整數和字符串的混合。

一些代碼:

entities= (from c in context.Entities 
      where c.ColumnA == (searchTermA ?? v.ColumnA) 
      where c.ColumnB == (searchTermB ?? v.ColumnB) 
      select new 
      { 
       v.Property, 
      }).ToList(); 

如果所有列不包含空值,實體返回。但是,如果列中有空值,我不會得到預期的結果。

我該如何解決這個問題?

理查德

+0

哪裏了'v'從何而來?它應該是'c'嗎? –

+0

是的,都是一樣的.. e's,v's,c's ...他們無處不在.. – Richard

回答

0

這是我用來處理空值。這是我能得到正確結果的唯一方法。

((searchTermA.HasValue) ? (c.ColumnA == searchTermA) : true) 
+0

我會接受這個,因爲它非常接近我後來將我的頭撞在廚房桌子上的可能解決方案。我試過: searchTermA == null? true:v.ColumnA == searchTermA 我會研究哪種組合最適合今天。謝謝! – Richard

0

簡單的方法是這樣:

var query = from c in context.Entities; 

if (searchTermA != null) { 
    query = query.Where(c => c.ColumnA == searchTermA); 
} 

// Rest of your conditions defined in the same way. 

var entities = query.Select(c => new { c.Property }).ToList();