我很难理解如何正确使用Except()。我想在where子句中使用Except()来排除匹配字符串列表的结果。我在下面编了一个简单的例子来说明。
同样,在这种情况下使用Except是最快的方法吗?如果不是,什么会更快?
var result = (from FunTable in Context.t_FunTable
where FunTable.ft_FunStartDate >= startDate
&& FunTable.ft_FunEndDate <= endDate
----> && FunTable.ft_FunStage != notAllowedStage1
----> && FunTabble.ft_FunStage != notAllowedStage2
select FunTable.ActivityName).ToList<String>();
我想这样做:
var result = (from FunTable in Context.t_FunTable
where FunTable.ft_FunStartDate >= startDate
&& FunTable.ft_FunEndDate <= endDate
----> && FunTable.ft_FunStage.Except(ListOfNotAllowedStages)
select FunTable.ActivityName).ToList<String>();
您可以使用Contains
:
!ListOfNotAllowedStage.Contains(FunTable.ft_FunStage)
或Any
:
!ListOfNotAllowedStage.Any(x => x == FunTable.ft_FunStage)
在我看来你想要这个:
&& !ListOfNotAllowedStages.Contains(FunTable.ft_FunStage)
Selman22在他的回答中给出了最佳解决方案,但要直接回答问题,必须注意查询语法不支持Except
方法。因此,如果您真的想使用Except
,您必须尝试这样做:
var result = (from FunTable in Context.t_FunTable
where FunTable.ft_FunStartDate >= startDate
&& FunTable.ft_FunEndDate <= endDate)
.Except(Context.t_FunTable
.Where(x => ListOfNotAllowedStages.Contains(x.ft_FunStage))))
.Select(x => x.ActivityName);
正如你所看到的,它有点复杂,因此这不是解决这个问题的最佳方法。如Selman22所示,在where
子句中添加一个简单的条件!ListOfNotAllowedStage.Contains(FunTable.ft_FunStage)
是最好的解决方案。