我有这个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”的一些变体,我必须这样做!包含或其他东西。有人能指出我正确的方向吗?
谢谢, 〜在圣地亚哥
答案 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。