C#Linq语法帮助 - 如何排除两个值?

时间:2009-09-10 15:19:34

标签: c# linq linq-to-sql

我有这个linq查询运行良好(尽管它可能写得更好,如果你注意到某些事情,请这样说)

var qry = BenefitCodes
    .Where(b => b.BenInterest != 'E' 
       && (b.BenProductLine == CoverageProductLine || b.BenProductLine == null) )
    .Select(b => b)
    .OrderBy(b => b.BenDesc);

管道中有一个新的要求是排除两个BenCodes(1001,1009),BenCodes只是SQL表中的另一个列。

我是否应该使用“.Contains”的一些变体,我必须这样做!包含或其他东西。有人能指出我正确的方向吗?

谢谢, 〜在圣地亚哥

4 个答案:

答案 0 :(得分:4)

是的,处理此问题的一种方法如下(为了简洁和可读性,我排除了查询的其余部分):

var excludedBenCodes = new List<int>() { 1001, 1009 };
var query = BenefitCodes.Where(b => !excludedBenCodes.Contains(b.BenCodes));

我认为这比在子句中添加子句b.BenCodes != 1001 && b.BenCodes != 1009的替代方案更具可读性和可维护性。

答案 1 :(得分:2)

您只需在Where子句中添加另一行,并使用BenCodes 1001或1009排除每一个。

像这样:

var qry = BenefitCodes.Where(b => b.BenInterest != 'E' && (b.BenProductLine == CoverageProductLine || b.BenProductLine == null) && b.BenCodes != 1001 && b.BenCodes != 1009 ).Select(b => b).OrderBy(b => b.BenDesc);

答案 2 :(得分:1)

这可能会使事情更具可读性,我会将查询更改为

var qry = BenefitCodes.Where(b => FitsCriteria(b)).OrderBy(b => b.BenDesc);

并添加方法

public bool FitsCriteria(BenefitCode b)
{
return b.BenInterest != 'E' && 
   (b.BenProductLine == CoverageProductLine || b.BenProductLine == null) && 
   b.BenCodes != 1001 && 
   b.BenCodes != 1009;
}

善,

答案 3 :(得分:0)

var qry = BenefitCodes
    .Where(b => b.Code != '1001' 
        && b.Code != '1009' 
        && b.BenInterest != 'E' 
        && (  b.BenProductLine == CoverageProductLine 
           || b.BenProductLine == null))
    .OrderBy(b => b.BenDesc);

当您不使用LINQ语法时,甚至不需要“选择”。因为Where和OrderBy方法已经返回了你的IQueryable。