繁体   English   中英

Linq to实体搜索算法

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM