我正在编辑我曾经只是
的代码 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>();
我如何将这两者合并在一起
答案 0 :(得分:3)
使用Concat
或Union
方法。
样品:
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>()
);
答案 1 :(得分:2)
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
,则永远不会评估(p as ServicePhase).Service.Code
这一行object reference not set to an instance of an object
。
false && NeverGoingToGetCalled()
因为错误且任何事情总是错误的。如果您想了解更多信息,可以将其称为short-circuit evaluation。
答案 2 :(得分:1)
不确定你指的是哪一个。第一种是如果你想进一步限制列表,第二种是你想要扩展它。
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)
答案 3 :(得分:1)
答案 4 :(得分:0)
以下是合并查询:
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>()