C# 参数为空时排除条件

C# 参数为空时排除条件,c#,entity-framework,linq,lambda,C#,Entity Framework,Linq,Lambda,我使用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 =>

我使用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;
}
public List GetPallet(string palletID,string locationID)
{
列表数据=新列表();
if(locationID!=null)
data=data.Where(x=>x.PalletID==PalletID&&x.LocationID==LocationID).ToList();
其他的
data=data.Where(x=>x.PalletID==PalletID.ToList();
返回数据;
}
确定它是:

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;
}
public List GetPallet(string palletID,string locationID)
{
列表数据=新列表();
数据=数据。其中(x=>x.PalletID==PalletID&&(locationID==null | | x.locationID==locationID)).ToList();
返回数据;
}

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

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

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

位置从何而来?如果是
locationID
?@RyanLundy感谢更正了它不应该是
&
,而不是
|
?否,因为如果locationID为null,子状态是正确的;如果locationID为null,子状态是正确的;如果locationID不为null,子状态是正确的