【问题标题】:Excluding Condition if Parameter is null如果参数为空,则排除条件
【发布时间】:2018-07-06 06:53:00
【问题描述】:

我正在使用 LINQ 和 Lambda 获取数据,使用此查询有 2 个条件。是否可以在没有if else条件的情况下编写此逻辑-

public List<Pallet> GetPallet(string palletID, string locationID)
{
    List<Pallet> data = new List<Pallet>();

    if (locationID != null)
        data = data.Where(x => x.PalletID == palletID && x.LocationID == locationID).ToList();
    else
        data = data.Where(x => x.PalletID == palletID).ToList();

    return data;
}

【问题讨论】:

  • location 来自哪里?应该是locationID
  • @RyanLundy 谢谢纠正

标签: c# entity-framework linq lambda


【解决方案1】:

没错:

public List<Pallet> GetPallet(string palletID, string locationID)
{
    List<Pallet> data = new List<Pallet>();
    data = data.Where(x => x.PalletID == palletID && (locationID == null || x.LocationID == locationID)).ToList();

    return data;
}

【讨论】:

  • 那里不应该是&amp;&amp; 而不是||
  • 否,因为如果 locationID 为 null 或(当 locationID 不为 null 时更进一步)如果它等于 Pallet.LocationID,则子语句是正确的
【解决方案2】:

这是一种获得正确结果的方法:

data = data
.Where(x => x.PalletID == palletID)
.Where(!string.IsNullOrEmpty(locationID)? x.LocationID == locationID : true)
.ToList();

注意:尽管语法正确,但接受的答案将返回错误的结果。即使locationID 为空或为空,它也会始终比较LocationID。请注意,对于locationID == null我们根本不想比较(我们不希望这样:x =&gt; x.LocationID == null)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2021-12-04
    • 2022-10-24
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多