C#Linq/如何在单个查询中编写以下代码



如何在单个查询中编写以下代码?

if (flagId>0 && homeOwnerId==0 && COntractorId==0)
{
var result = _unitOfWork.IToolBeltRepository.FindAllAsList(x => x.FlagId == flagId).ToList();
}
if (flagId == 0 && homeOwnerId >0 && COntractorId == 0)
{
var result = _unitOfWork.IToolBeltRepository.FindAllAsList(x => x.HomeOwnerId == homeOwnerId).ToList();
}
if (flagId == 0 && homeOwnerId == 0 && COntractorId >0)
{
var result = _unitOfWork.IToolBeltRepository.FindAllAsList(x => x.ContractorId == COntractorId).ToList();
}
if (flagId > 0 && homeOwnerId > 0 && COntractorId == 0)
{
var result= _unitOfWork.IToolBeltRepository.FindAllAsList(x => x.FlagId == flagId && x.HomeOwnerId==homeOwnerId).ToList();
}
if (flagId > 0 && homeOwnerId == 0 && COntractorId> 0)
{
var result = _unitOfWork.IToolBeltRepository.FindAllAsList(x => x.FlagId == flagId && x.ContractorId==COntractorId).ToList();
}
if (flagId == 0 && homeOwnerId > 0 && COntractorId > 0)
{
var result = _unitOfWork.IToolBeltRepository.FindAllAsList(x => x.HomeOwnerId == homeOwnerId && x.ContractorId ==COntractorId).ToList();
}

下面的COde应该与您的示例相同

_unitOfWork.IToolBeltRepository
.FindAllAsList(x => (flagId  == 0 || x.FlagId == flagId) 
&& (COntractorId  == 0 || x.ContractorId == COntractorId) 
&& (homeOwnerId  == 0 || x.HomeOwnerId == homeOwnerId)).ToList()

您可能(将(需要捕捉flagId、homeOwnerId和ContractorId均为0或all的边缘情况>0,因为它们在代码中被隐式忽略。

if ((flagId == 0) && (homeOwnerId == 0) && (ContractorId == 0))
{
// handle case
}
else if ((flagId > 0) && (homeOwnerId > 0) && (ContractorId > 0))
{
// handle case
}
else
{
var result = _unitOfWork.IToolBeltRepository.FindAllAsList(x => 
((flagId == 0) || (x.FlagId == flagId)) &&
((homeOwnerId == 0) || (x.HomeOwnerId == homeOwnerId)) &&
((COntractorId == 0) || (x.ContractorId==COntractorId))
).ToList();
}

最新更新