如何在where子句中使用LINQ Except()



我很难理解如何正确使用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)是最好的解决方案。

相关内容

  • 没有找到相关文章

最新更新