C# 在Linq查询中使用条件if语句
我正在尝试编写一个使用if语句的linq查询 在下面的代码中,我正在搜索 n、 SAU_ID=SAU.SAUID在哪里 ReportingPeriod列包含“Oct1”,则 FiscalYear-aprYearDiff=sau.SAUYearCode 否则 FiscalYear-octYearDiff=sau.SAUYearCode 我的代码只提供SAUID和“Oct1”的匹配项 实现SEE语句需要什么代码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&
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嗯,我并不是说我在那里做了一些非常好的格式设置。我坚信合理使用制表符和大量使用括号可以提高代码的可读性(至少对我来说是这样)。总的来说,这是一个品味和个人喜好的问题,所以可以随意回滚。可以详细说明为什么这是一个坏主意,但无论如何都要投票,因为这应该更好地工作,并且在逻辑上是等效的。因为声明式代码比命令式代码更好,而且这一个更简单。我花了很长时间打字。但我完全同意