Linq到实体搜索算法

时间:2011-08-19 05:59:53

标签: c# entity-framework entity-framework-4

我正在实施一项搜索,该搜索将采用六种可能(但不是必需的)用户输入,然后尝试将它们与某些实体进行匹配。

我认为我遇到的问题是EF和SQL Server认为空值是两个非常不同的东西。

想法:选择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();

如果所有列都不包含空值,则返回实体。但是,如果列有空值,我不会得到预期的结果。

我该如何解决这个问题?

理查德

3 个答案:

答案 0 :(得分:0)

让函数接受Predicate<T>并在UI端构建过滤器。

请参阅: http://msdn.microsoft.com/en-us/library/bfcke1bz.aspx

答案 1 :(得分:0)

这是我用来处理空值的。这是我获得正确结果的唯一方法。

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

答案 2 :(得分: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();