仅当属性不为空时才包含在条件中

问题描述 投票:0回答:1

我有 lambda 表达式,当输入对象和数据库对象中的所有值都相等时,我会获取记录

var matchingrecord = (from data in dbContext.TableA
                       where data.Id == inputDto.Id &&                                             
                       data.AddTypeId == inputDto.AddressTypeId &&
                       inputDto.AddressLineOne == data.AddressLineOne) &&
                       (inputDto.AddressLineTwo == (data.AddressLineTwo ?? string.Empty)) &&
                   (inputDto.State ==null||(inputDto.State.stateId == data.State.StateId)) &&
                        (inputDto.City == data.City) &&
                        (inputDto.ZipCd == data.ZipCd)                                                  
                      select data).FirstOrDefault();

仅当 zipcodeExtn 不为空时,我才需要在 where 子句中包含另一个字段检查(zipcodeExtn)。

 (inputDto.City == data.City) &&
  (inputDto.ZipCd == data.ZipCd)   &&
(data.zipcodeExtn!=null && inputDto.zipcodeExtn==data.zipcodeExtn) // This should be added only when zipcodeExtn is not null

请告诉我是否可以写一个语句而不是添加 if 条件。让我知道 zipcdExtn 的逻辑是否有任何替代方案

c# lambda linq-to-sql linq-to-entities
1个回答
0
投票

不要用“添加语句 if 条件”的方式来思考它。相反,考虑构建一个在您想要接受的情况下为 true 的布尔表达式。您是否希望该表达式在

true
的情况下计算为
inputDto.zipcodeExtn == null
,而不考虑其他因素?布尔 Or 运算符执行以下操作:
inputDto.zipcodeExtn == null || (...expression)

© www.soinside.com 2019 - 2024. All rights reserved.