Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq查询中使用条件if语句_C#_Linq - Fatal编程技术网

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

C# 在Linq查询中使用条件if语句,c#,linq,C#,Linq,我正在尝试编写一个使用if语句的linq查询 在下面的代码中,我正在搜索 n、 SAU_ID=SAU.SAUID在哪里 ReportingPeriod列包含“Oct1”,则 FiscalYear-aprYearDiff=sau.SAUYearCode 否则 FiscalYear-octYearDiff=sau.SAUYearCode 我的代码只提供SAUID和“Oct1”的匹配项 实现SEE语句需要什么代码 int FiscalYear = 2014; List&

我正在尝试编写一个使用if语句的linq查询

在下面的代码中,我正在搜索

n、 SAU_ID=SAU.SAUID在哪里

ReportingPeriod列包含“Oct1”,则 FiscalYear-aprYearDiff=sau.SAUYearCode

否则

FiscalYear-octYearDiff=sau.SAUYearCode

我的代码只提供SAUID和“Oct1”的匹配项

实现SEE语句需要什么代码

    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 ));
    }
int-FiscalYear=2014;
List addtowns=新列表();
List reorg=_entities.Stage_reorg.ToList();
int APRYERDIFF=2;
int octyerdiff=1;
foreach(reorg中的var sau)
{
addtowns.AddRange(_entities.Stage_)adcsdtown
.其中(n=>n.SAU_ID==SAU.SAUID
&&(n.ReportingPeriod==“八月份1”
?(财政年度-aprYearDiff)=sau.SAUYearCode
:(财政年度-octYearDiff)=sau.SAUYearCode)
。选择(n=>n.TownCode));
}

这里有一种可能的方法,但这可能不适用于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 ))

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

(n.ReportingPeriod == "Oct1" && (FiscalYear - aprYearDiff) == sau.SAUYearCode)  
|| (n.ReportingPeriod != "Oct1" && (FiscalYear - octYearDiff) == sau.SAUYearCode)

您可以修复语法,但我认为它无论如何不会与EF一起工作。
.where(a=>{/*some-code*/return/*some-bool-value*/})
@EugenePodskal,这在编辑之前实际上更容易阅读。@DCShannon嗯,我并不是说我在那里做了一些非常好的格式设置。我坚信合理使用制表符和大量使用括号可以提高代码的可读性(至少对我来说是这样)。总的来说,这是一个品味和个人喜好的问题,所以可以随意回滚。可以详细说明为什么这是一个坏主意,但无论如何都要投票,因为这应该更好地工作,并且在逻辑上是等效的。因为声明式代码比命令式代码更好,而且这一个更简单。我花了很长时间打字。但我完全同意