在Linq查询中使用条件if语句
本文关键字:条件 if 语句 Linq 查询 | 更新日期: 2023-09-27 18:19:58
我正在尝试编写一个使用if语句的linq查询。
在下面的代码中,我正在搜索的匹配项
n.SAU_ID=SAU。SAUID,其中
ReportingPeriod列包含"Oct1",然后财政年度-aprYearDiff=sau。SAUYearCode。
其他
财政年度-octYearDiff=sau。SAUYearCode。
我的代码只提供SAUID和"Oct1"的匹配项。
实现这些语句需要什么代码?
int FiscalYear = 2014;
List<String> addtowns = new List<string>();
List<Stage_Reorg> reorg = _entities.Stage_Reorg.ToList();
int aprYearDiff = 2;
int octYearDiff = 1;
foreach (var sau in reorg)
{
addtowns.AddRange(_entities.Stage_EPSSubsidySADCSDTown
.Where(n => n.SAU_ID == sau.SAUID
&& (n.ReportingPeriod == "Oct1"
? (FiscalYear - aprYearDiff) == sau.SAUYearCode
: (FiscalYear - octYearDiff) == sau.SAUYearCode))
.Select(n => n.TownCode ));
}
无论如何,这都是个坏主意。将条件转换为
(n.ReportingPeriod == "Oct1" && (FiscalYear - aprYearDiff) == sau.SAUYearCode)
|| (n.ReportingPeriod != "Oct1" && (FiscalYear - octYearDiff) == sau.SAUYearCode)
这里有一种可能的方法,但这可能不适用于EF。您需要将所有记录加载到内存中,然后执行过滤:
addtowns.AddRange(_entities.Stage_EPSSubsidySADCSDTown
.Where(n => {
bool b = n.ReportingPeriod == "Oct1"
? (FiscalYear - aprYearDiff) == sau.SAUYearCode
: (FiscalYear - octYearDiff) == sau.SAUYearCode);
return b && n.SAU_ID == sau.SAUID;
}).Select(n => n.TownCode ))