如何根据先前返回的值向LINQ查询添加条件条件

本文关键字:条件 LINQ 添加 查询 何根 返回 | 更新日期: 2023-09-27 18:11:48

例如:

var sList = from ASL in aslist
            where ASL.Description == as.ToString()
            select ASL;
as = sList.FirstOrDefault();
var rList = from ARL in arlist
            where ARL.Description == rDescription && ARL.Id == as.Id
            select ARL;

现在可以看到,rList查询(即&& ARL.Id == as.Id)的最后一个条件是基于从sList查询中检索到的值。我的问题是当sListNULL,我得到一个错误。只有当sList不为空时,我才想包含最后一个条件(即&& ARL.Id == as.Id)。

我可以像下面这样使用if else来完成它,但是如果可能的话,我想使用LINQ来优雅地完成它:

if (as != null)
{
    // include ARL.Id == as.Id condition in the query
} 
else
{
    // exclude ARL.Id == as.Id condition from the query
}

提前感谢!

如何根据先前返回的值向LINQ查询添加条件条件

&& (assetsensor == null || ARL.SensorID == assetsensor.ID)

根据您正在使用的查询提供程序,如果您可以提前确定它不属于那里,我可能会建议不要在LINQ查询中包含条件。如果你使用LINQ to Objects,这可能不会有太大的区别,但如果你使用LINQ to SQL或LINQ to Entities,在查询中包含无关的条件可能会导致查询提供程序生成带有不必要连接的SQL代码,这可能会影响性能,或者如果提供程序不理解你用来测试缺失值的代码,甚至可能根本无法工作。

我会这样做:

var sList = from ASL in assetsensorlist
            where ASL.Description == assetSensor.ToString()
            select ASL;
assetsensor = sList.FirstOrDefault();
var rList = from ARL in assetruleslist
            where ARL.Description == ruleDescription
            select ARL;
if (assentsensor != null)
{
  // Fluent syntax is simpler for this purpose
  rList = rList.Where(x => x.SensorID == assetsensor.ID);
}