Linq中的条件Where子句查询特定情况

时间:2018-06-19 17:48:40

标签: c# list entity-framework linq

我有一个实体框架查询,该查询正在基于特定条件从数据库检索结果。但是,有一个实例,我想根据where子句中的条件过滤结果。我认为案例说明是我将如何实现这一目标的人,有人能指出我正确的方向吗?

因此,对于从中断列表返回的结果,对于中断类型为“实时”的情况,我只希望在NumberOfPeopleAffected大于4的情况下将其包括在结果中。例如:

 outageList.Where(o => o.FaultType == "Live" && o.NumberOfPeopleAffected > 4)

问题是,上面的代码不够用,因为我也想返回其他中断,就现场中断而言,我只想在受影响的人数大于4时返回它们。

这有意义吗?我需要案件陈述吗?如果是这样,用LINQ编写此内容的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

您的Where()子句中可以包含OR条件:

outageList.Where(o => (o.FaultType == "Live" && o.NumberOfPeopleAffected > 4) || o.FaultType != "Live");

答案 1 :(得分:0)

要在linq中执行所需操作,请在下面使用。

var faultList = new[] {"Live", "SomethingElse"};

outageList.Where(o => faultList.Contains(o.FaultType) && o.NumberOfPeopleAffected > (o.FaultType == "Live" ? 4 : 0));

说实话,我可以使用此语句,但是我意识到它可能很难阅读。

答案 2 :(得分:0)

使用此查询:

 outageList.Where(o => (o.FaultType == "Live" && o.NumberOfPeopleAffected > 4) || o.FaultType != "Live")

答案 3 :(得分:0)

由于建立查询时,该类型是IQueryable,并且因为它实际上不会命中数据库(或其他),并且不会具体化结果,直到您.Select.ToList()为止,可以考虑在switch / if子句中链接您的过滤器。这将有效地在您的查询中添加一堆或“ where”子句,直到您真正执行它为止。

例如:

if(case1)
outageList = outageList.Where(o => o.FaultType == "Live" && o.NumberOfPeopleAffected > 4)

if(case2)
outageList = outageList.Where(o => o.FaultType == "Unplanned" && o.NumberOfPeopleAffected > 0)

return outageList.Select(i => new myViewModel{
    prop1 = i.prop1,
    prop2 = i.prop2 // etc
})