[英]Linq to Entities Search Algorithm
我正在實現一個搜索,它將使用六個可能的(但不是必需的)用戶輸入,然后嘗試將它們與某些實體匹配。
我認為我遇到的問題是EF和SQL Server將null視為兩個非常不同的事物。
想法:選擇一個實體,其中columnA =(如果columnA為null,則columnA(或null),否則為searchTerm)。 搜索詞是整數和字符串的混合。
一些代碼:
entities= (from c in context.Entities
where c.ColumnA == (searchTermA ?? v.ColumnA)
where c.ColumnB == (searchTermB ?? v.ColumnB)
select new
{
v.Property,
}).ToList();
如果所有列都不包含空值,則返回實體。 但是,如果列為空,則不會得到預期的結果。
我該如何解決?
理查德
讓函數接受Predicate<T>
並在UI端進行過濾器的構造。
請參閱: http : //msdn.microsoft.com/en-us/library/bfcke1bz.aspx
這就是我用來處理空值的東西。 這是我可以獲得正確結果的唯一方法。
((searchTermA.HasValue) ? (c.ColumnA == searchTermA) : true)
一種簡單的方法是:
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.