需要帮助合并两个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>();
我如何将这两者合并在一起
使用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>()
);
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>()