如果Parameter为null,则Lambda表达式实体框架将排除条件

时间:2018-07-06 06:53:00

标签: c# entity-framework linq lambda

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

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

2 个答案:

答案 0 :(得分:4)

确定是

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

答案 1 :(得分:0)

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

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

注意:尽管语法正确,但是接受的答案将返回错误的结果。即使LocationID为空或为空,它也会始终比较locationID。请注意,在locationID == null 的情况下,我们根本不希望进行比较(我们不希望这样做:x => x.LocationID == null)。