我无法理解如何正确使用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>();
答案 0 :(得分:5)
您可以改为使用Contains
:
!ListOfNotAllowedStage.Contains(FunTable.ft_FunStage)
或Any
:
!ListOfNotAllowedStage.Any(x => x == FunTable.ft_FunStage)
答案 1 :(得分:3)
在我看来你想要这个:
&& !ListOfNotAllowedStages.Contains(FunTable.ft_FunStage)
答案 2 :(得分:2)
最佳解决方案由Selman22中的his answer提供,但要直接回答问题,必须注意Except
方法是not supported by the query syntax。所以,如果你真的想使用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所示,在!ListOfNotAllowedStage.Contains(FunTable.ft_FunStage)
子句中添加简单条件where
是最佳解决方案。