查询 - 不包含

时间:2013-10-23 10:44:08

标签: asp.net-mvc linq

我有一个搜索查询来查找客户。

我想使用Sounds Like函数返回其他可能的结果,但这会在我的主搜索查询中返回一些相同的结果。

我只想在局部视图中显示其他结果。

我基本上需要一个DoesNotContain。

到目前为止,我的主要查询是:

customer = customer.Where(c => SqlFunctions.StringConvert((double)c.CustomerID).Trim().Equals(searchString)
                          || c.CustomerName.ToUpper().Contains(searchString.ToUpper()));

还有其他结果:

customeradditional = customeradditional.Where(c => SqlFunctions.SoundCode(c.CustomerName.ToUpper()) == SqlFunctions.SoundCode(searchString.ToUpper()));

我能看到的唯一可行解决方案是执行包含查询,遍历每个项目并获取ID,然后对CustomerID执行另一个查询!= 1或CustomerID!= 2或CustomerID!= 3等

2 个答案:

答案 0 :(得分:1)

尝试使用Except

customeradditional = customeradditional
    .Where(c => SqlFunctions.SoundCode(c.CustomerName.ToUpper()) == SqlFunctions.SoundCode(searchString.ToUpper()))
    .Except(customer);

答案 1 :(得分:1)

我不确定我是否理解你的错误:

根据您现在的情况,customeraddtional查询确实会返回customer查询中已返回的一些客户。而且您只需要结果,而这些结果尚未包含在客户查询中。

然后解决方案是:

 customeradditional = customeradditional.Where(c =>  
                         SqlFunctions.SoundCode(c.CustomerName.ToUpper()) == 
                         SqlFunctions.SoundCode(searchString.ToUpper()))
                                        .Except(customer);

这样您就明确排除了客户对象中的每个项目。