需要帮助合并两个LINQ语句

本文关键字:两个 LINQ 语句 帮助 合并 | 更新日期: 2023-09-27 18:13:37

我正在编辑以前只是的代码

     return phases
            .OfType<ServicePhase>()
            .Where(p => p.Service.Code == par.Service.Code)
            .Cast<ParPhase>()

但是现在我希望它包括两个

 return phases
                .OfType<ServicePhase>()
                .Where(p => p.Service.Code == par.Service.Code)
                .Cast<ParPhase>()
             .OfType<ParTypePhase>()
            .Where(p => p.ParType.Code == par.Type.Code)
            .Cast<ParPhase>();

我如何将这两者合并在一起

需要帮助合并两个LINQ语句

使用ConcatUnion方法。

样品:

var result = 
    phases
        .OfType<ServicePhase>()
        .Where(p => p.Service.Code == par.Service.Code)
        .Cast<ParPhase>()
        .Union(
            phases.OfType<ParTypePhase>()
            .Where(p => p.ParType.Code == par.Type.Code)
            .Cast<ParPhase>()
         );
return phases
            .Where(p => ((p is ServicePhase) && (p as ServicePhase).Service.Code == par.Service.Code) || 
                        ((p is ParTypePhase) && (p as ParTypePhase).ParType.Code == par.Type.Code))
            .Cast<ParPhase>()

这是因为如果p不是ServicePhase,则将是object reference not set to an instance of an object的这条线(p as ServicePhase).Service.Code永远不会被求值。

false && NeverGoingToGetCalled()

因为false AND任何东西都是false。如果你想了解更多信息,它被称为短路评估。

不确定你指的是哪一个。第一个是如果您想进一步限制列表,第二个是如果你想扩展它

from p in phrases
where p.Service.Code == par.Service.Code && p.ParType.Code == par.Type.Code
select new ParPhase(p)

from p in phrases
where p.Service.Code == par.Service.Code || p.ParType.Code == par.Type.Code
select new ParPhase(p)

如果考虑规范模式,会更容易:http://en.wikipedia.org/wiki/Specification_pattern

这是组合查询:

return phases.OfType<ServicePhase>()
.Where(p => 
{
  bool tmpResult = p.Service.Code == par.Service.Code;
  if(tmpResult && p is ParTypePhase)
  {
      tmpResult = (p as ParTypePhase).ParType.Code == par.Type.Code;
  }
  return tmpResult;
}).Cast<ParPhase>()