2

例如:

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我得到一个错误。我只想在不为空&& ARL.Id == as.Id时才包含最后一个条件(即) 。sList

我可以使用 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
}

提前致谢!

4

2 回答 2

6
&& (assetsensor == null || ARL.SensorID == assetsensor.ID)
于 2013-05-02T20:52:52.170 回答
0

根据您使用的查询提供程序,如果您可以提前确定它不属于那里,我可能建议您根本不将条件包含在您的 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);
}
于 2013-05-02T21:49:03.033 回答