在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 ));
    }

在Linq查询中使用条件if语句

无论如何,这都是个坏主意。将条件转换为

(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 ))